Gym - 101670E(Forest Picture)无脑模拟
程序员文章站
2022-03-14 19:45:32
...
题意:
- 如果s==0的话就在给出的坐标处画一个“_o_”( ASCII 95, 111, 95)的图案,表示a tree stump。
- 如果s>0的话,就在给出的坐标处画一个高度为s的a standing tree,这个standing tree首先有一个root图案为:“_|_”,(ASCII 95, 124, 95),然后有s个“|”表示树干,最后在又一个树顶用“^” 表示ASCII 94)。
- 需要注意的地方是,题目中的坐标表示为左下角为(0,0),右上角是(m-1,m-1),需要做一下下标的变换对应到数组中。
题解:
根据题意一步步模拟。
附代码:
#include <set> #include <map> #include <cmath> #include <stack> #include <queue> #include <vector> #include <string> #include <cstdio> #include <cstring> #include <sstream> #include <iomanip> #include <iostream> #include <algorithm> #define clr(str,x) memset(str,x,sizeof(str)) #define FRER() freopen("in.txt","r",stdin); #define FREW() freopen("out.txt","w",stdout); #define INF 0x7fffffff #define maxn typedef long long int ll; using namespace std; char ans[110][110]; int m,n; bool judge(int x,int y) { if(x<0||y<0||x>=m||y>=m) return false; else return true; } int main() { //FRER() //FREW() int s,x,y; while(scanf("%d%d",&m,&n)!=EOF) { memset(ans,0,sizeof(ans)); for(int i=0;i<n;i++) { scanf("%d%d%d",&s,&y,&x); if(s==0) { if(judge(y,x)) ans[m-x-1][y]='o'; if(judge(y-1,x)) ans[m-x-1][y-1]='_'; if(judge(y+1,x)) ans[m-x-1][y+1]='_'; } else { if(judge(y,x)) ans[m-x-1][y]='|'; if(judge(y-1,x)) ans[m-x-1][y-1]='_'; if(judge(y+1,x)) ans[m-x-1][y+1]='_'; for(int i=1;i<=s;i++) { if(judge(y,x+i)) ans[m-x-1-i][y]='|'; if(judge(y-1,x+i)) ans[m-x-1-i][y-1]='/'; if(judge(y+1,x+i)) ans[m-x-1-i][y+1]='\\'; } if(judge(y,x+s+1)) ans[m-x-s-2][y]='^'; } } for(int i=-1;i<=m;i++) { for(int j=-1;j<=m;j++) { if(i==-1||i==m||j==-1||j==m) printf("*"); else if(ans[i][j]==0) printf("."); else printf("%c",ans[i][j]); } printf("\n"); } printf("\n"); } return 0; }
上一篇: 6年前的GTX 1080显卡挑战8K游戏:最惨1帧 卡成PPT
下一篇: JZ DAY3总结