ZOJ 3804 YY's Minions

来源:互联网 发布:华为网络在那 编辑:程序博客网 时间:2024/04/28 00:51

ZOJ 3804 YY's Minions

简单的模拟题 

初始时  每个点都有两种状态 0 1  然后判断每个点周围八个方向中相邻点的状态  判断状态为1的个数

注意点状态变为X是在每秒钟的末尾 所以要在每秒钟的末尾对状态进行改变

用两个数组对前一秒的状态跟这一秒的状态分别进行存储

#include <cstdio>#include <iostream>#include <cstring>#include <cmath>#include <algorithm>#include <string.h>#include <string>#define eps 1e-8#define op operator#define MOD  10009#define MAXN  100100#define FOR(i,a,b)  for(int i=a;i<=b;i++)#define FOV(i,a,b)  for(int i=a;i>=b;i--)#define REP(i,a,b)  for(int i=a;i<b;i++)#define REV(i,a,b)  for(int i=a-1;i>=b;i--)#define MEM(a,x)    memset(a,x,sizeof a)#define ll __int64using namespace std;char map[55][55];char map2[55][55];bool vis[55][55];int change[55][55];int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}};int main(){//freopen("ceshi.txt","r",stdin);    int tc;    scanf("%d",&tc);    while(tc--)    {        int n,m,f,k;        scanf("%d%d%d%d\n",&n,&m,&f,&k);        for(int i=0;i<n;i++)        {            scanf("%s",map[i]);            strcpy(map2[i],map[i]);        }        MEM(vis,0);        for(int i=0;i<n;i++)            for(int j=0;j<m;j++)                change[i][j]=f+1;        int t,x,y;        for(int i=0;i<k;i++)        {            scanf("%d%d%d",&t,&x,&y);            change[x-1][y-1]=t;        }        for(int i=1;i<=f;i++)        {            for(int j=0;j<n;j++)            {                for(int k=0;k<m;k++)                {                    int num=0;                    if(map[j][k]=='X')                    {                        map2[j][k]='X';                        continue;                    }                    for(int x=0;x<8;x++)                    {                        if((j+dir[x][0])<0||(j+dir[x][0])>=n||(k+dir[x][1])<0||(k+dir[x][1])>=m)                            continue;                        char c=map[j+dir[x][0]][k+dir[x][1]];                        if(c=='1')  num++;                    }                    if(map[j][k]=='0')                    {                        if(num==3)  map2[j][k]='1';                        else map2[j][k]=map[j][k];                    }                    else                    {                        if(num!=2&&num!=3)                            map2[j][k]='0';                        else map2[j][k]=map[j][k];                    }                }            }            for(int j=0;j<n;j++)            {                strcpy(map[j],map2[j]);                for(int k=0;k<m;k++)                {                    if(i==(change[j][k]))                    {                        map[j][k]='X';                    }                }            }//        cout<<"ii  "<<i<<endl;//        for(int y=0;y<n;y++)//            printf("%s\n",map[y]);        }//时间//        puts("");        for(int i=0;i<n;i++)            printf("%s\n",map[i]);    }    return 0;}


0 0
原创粉丝点击