现在的位置: 首页 > 综合 > 正文

ZOJ 3804

2017年11月21日 ⁄ 综合 ⁄ 共 1511字 ⁄ 字号 评论关闭

我的错!!!这种水题!!!我居然!!!什么都不说了!!!!!!

总结下,今天死的特别难看,我还真真切切坑队友了。吸取教训。

第一:比赛的时候状态还是很重要的,刚开始的时候一定要找到合适的题,大致能够敲出来的,一定要找,不然等到后面再敲水题状态很受影响。今天就是这样。

第二:关于题目的。平常看题比较马虎,自己做练习的时候看不懂就直接搜题解了,或者平常直接问队友。这样非常不好!!!!这道题就是,第二个样例都没看,就直接做了,没有判重。。。。就算样例懒得过一遍,但是起码输入也要看一看的嘛!!害得我赛后这种水题都不好意思交了!!!

第三:交的时候出现了越界。后来发现是有数组开小了。自己居然懒得去题目中找。所以平常一定要注意数据范围!!!

好了。。。。。我很心累。。。。

对了!!还跑得很慢!!!你妹啊!!好丢脸!!!……

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

抱歉!评论已关闭.