我的错!!!这种水题!!!我居然!!!什么都不说了!!!!!!
总结下,今天死的特别难看,我还真真切切坑队友了。吸取教训。
第一:比赛的时候状态还是很重要的,刚开始的时候一定要找到合适的题,大致能够敲出来的,一定要找,不然等到后面再敲水题状态很受影响。今天就是这样。
第二:关于题目的。平常看题比较马虎,自己做练习的时候看不懂就直接搜题解了,或者平常直接问队友。这样非常不好!!!!这道题就是,第二个样例都没看,就直接做了,没有判重。。。。就算样例懒得过一遍,但是起码输入也要看一看的嘛!!害得我赛后这种水题都不好意思交了!!!
第三:交的时候出现了越界。后来发现是有数组开小了。自己居然懒得去题目中找。所以平常一定要注意数据范围!!!
好了。。。。。我很心累。。。。
对了!!还跑得很慢!!!你妹啊!!好丢脸!!!……
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
#define maxn 100
#define maxx 3000
int chx[8]={1,1,1,0,0,-1,-1,-1};
int chy[8]={0,-1,1,1,-1,0,1,-1};
int n,m,f,kk;
int t[maxx],x[maxx],y[maxx],tt[maxx],que[maxx];
struct node
{
int map[maxn][maxn];
}a,b;
void init()
{
int i,j,k;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
int tmp=0;
b.map[i][j]=a.map[i][j];
for(k=0;k<8;k++)
{
if(i+chx[k]>=0&&i+chx[k]<n&&j+chy[k]>=0&&j+chy[k]<m)
if(a.map[i+chx[k]][j+chy[k]]==1) tmp++;
}
if(a.map[i][j]==1)
{
if(tmp<2||tmp>3) b.map[i][j]=0;
}
if(a.map[i][j]==0)
{
if(tmp==3) b.map[i][j]=1;
}
}
}
a=b;
}
int cmp(int a,int b)
{
return t[a]<t[b];
}
int main()
{
int Q;
scanf("%d",&Q);
while(Q--)
{
scanf("%d%d%d%d",&n,&m,&f,&kk);
memset(tt,0,sizeof(tt));
memset(que,0,sizeof(que));
int i,j,k;
char s[maxn];
for(i=0;i<n;i++)
{
scanf("%s",s);
for(j=0;j<m;j++) a.map[i][j]=s[j]-'0';
}
for(i=0;i<kk;i++)
{
scanf("%d%d%d",&t[i],&x[i],&y[i]);
x[i]--;y[i]--;
// que[i]=i;
que[i]=i;
}
int top=0;
sort(que,que+kk,cmp);
for(i=1;i<=f;i++)
{
init();
while(i==t[que[top]]&&top<kk) {a.map[x[que[top]]][y[que[top]]]=2;top++;}
// put();
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a.map[i][j]==2) printf("X");
else printf("%d",a.map[i][j]);
}
printf("\n");
}
}
return 0;
}