欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}

 

相关标签: 模拟