QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#551080#7733. Cool, It’s Yesterday Four Times MoreHongMeiling#TL 0ms0kbC++142.6kb2024-09-07 15:22:162024-09-07 15:22:16

Judging History

你现在查看的是最新测评结果

  • [2024-09-07 15:22:16]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2024-09-07 15:22:16]
  • 提交

answer

# include <bits/stdc++.h>
using namespace std;
const int mn=1000;

int T,n,m;
char Ar[mn+3];
inline int tow(int i,int j) {
    return (i-1)*m+j;
}
inline char a(int i,int j) {
    return Ar[(i-1)*m+j];
}
struct Kangaroo{
    int x,y;
    bool to[mn+3];
    bool win;
}kan[mn+3];int tot=0;
queue<pair<int,int>>q;
const int tox[5]={0,-1,1,0,0};
const int toy[5]={0,0,0,-1,1};
bool OK(int x,int y) {
    return x>=1 && x<=n && y>=1 && y<=m;
}

int main() {
    cin>>T;
    while(T--) {
        tot=0;
        memset(Ar,0,sizeof(Ar));

        cin>>n>>m;
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=m;j++) {
                cin>>Ar[(i-1)*m+j];
                if(Ar[(i-1)*m+j]=='.') {
                    kan[++tot].x=i;
                    kan[tot].y=j;
                    kan[tot].win=false;
                }
            }
        }
for(int i=1;i<=n;i++) {
            for(int j=1;j<=m;j++) {
                if(Ar[(i-1)*m+j]!='.' &&Ar[(i-1)*m+j]!='0') {
while(true);
                }
            }
        }

        for(int k=1;k<=tot;k++) {
            //bfs
            for(int i=1;i<=n;i++) {
                for(int j=1;j<=m;j++) {
                    kan[k].to[tow(i,j)]=false;
                }
            }
            kan[k].to[tow(kan[k].x,kan[k].y)]=true;
            q.push(make_pair(kan[k].x,kan[k].y));

            while(!q.empty()) {
                int x=q.front().first,y=q.front().second;
                q.pop();
                for(int dir=1;dir<=4;dir++) {
                    int nx=x+tox[dir],ny=y+toy[dir];
                    if(OK(nx,ny) && a(nx,ny)=='.' && !kan[k].to[tow(nx,ny)]) {
                        kan[k].to[tow(nx,ny)]=true;
                        q.push(make_pair(nx,ny));
                    }
                }
            }
            /*for(int i=1;i<=n;i++) {
                for(int j=1;j<=m;j++) {
                    cout<<kan[k].to[tow(i,j)];
                }
                cout<<endl;
            }*/
        }

        for(int dx=-n;dx<=n;dx++) 
            for(int dy=-m;dy<=m;dy++) {
                int winner=0;
                for(int k=1;k<=tot;k++) {
                    int x=kan[k].x,y=kan[k].y;
                    if(OK(x+dx,y+dy) && kan[k].to[tow(x+dx,y+dy)]) {
                        if(winner==0) winner=k;
                        else goto NO;
                    }
                }
                if(winner!=0) kan[winner].win=true;

                NO:;
            }
        int ans=0;
        for(int k=1;k<=tot;k++) 
            if(kan[k].win) ans++;
        cout<<ans<<endl;
    }
    return 0;
}

詳細信息

Test #1:

score: 0
Time Limit Exceeded

input:

4
2 5
.OO..
O..O.
1 3
O.O
1 3
.O.
2 3
OOO
OOO

output:


result: