QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#594759#7733. Cool, It’s Yesterday Four Times Morezhangboju#WA 1ms5996kbC++142.3kb2024-09-28 10:09:342024-09-28 10:09:45

Judging History

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

  • [2024-09-28 10:09:45]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5996kb
  • [2024-09-28 10:09:34]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1010;
const int mx[4]={0,1,0,-1};
const int my[4]={1,0,-1,0};
int n,m;
char ch[MAXN][MAXN];
int tot;
bool vis[MAXN][MAXN];
bool flag[MAXN][MAXN<<1];
vector<int> vec[MAXN];
int trans(int i,int j){
    return 2*i*n+j;
}
void dfs(int stx,int sty,int x,int y){
    int id=trans(x-stx,y-sty);
    // cout<<x-stx<<' '<<y-sty<<' '<<id<<endl;
    // cout<<ch[x][y]<<endl;
    flag[tot][id]=true;
    vec[tot].push_back(id);
    vis[x][y]=true;
    for(int i=0;i<4;++i){
        int nx=x+mx[i],ny=y+my[i];
        if(vis[nx][ny]||nx<1||ny<1||nx>n||ny>m||ch[nx][ny]=='O')continue;
        // cout<<nx<<' '<<ny<<' '<<ch[nx][ny]<<' '<<(ch[nx][ny]=='0')<<endl;
        dfs(stx,sty,nx,ny);
    }
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;++i){
            scanf("%s",ch[i]+1);
        }
        tot=0;
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){
                if(!vis[i][j]&&ch[i][j]!='O'){
                    ++tot;
                    // cout<<"!"<<endl;
                    dfs(i,j,i,j);
                }
            }
        }
        // for(int i=1;i<=tot;++i){
        //     for(auto x: vec[i]){
        //         cout<<x<<' ';
        //     }
        //     cout<<endl;
        // }
        int ans=0;
        for(int i=1;i<=tot;++i){
            bool ck=true;
            for(int j=1;j<=tot;++j){
                if(i==j)continue;
                bool fl=false;
                for(auto x: vec[i]){
                    // cout<<'?'<<x<<' '<<flag[j][x]<<endl;
                    if(!flag[j][x]){
                        fl=true;
                        break;
                    }
                }
                // cout<<i<<' '<<j<<' '<<fl<<endl;
                if(!fl){
                    ck=false;
                    break;
                }
            }
            if(ck)ans+=vec[i].size();
        }
        printf("%d\n",ans);
        for(int i=1;i<=tot;++i){
            for(auto x: vec[i]){
                flag[i][x]=false;
            }
            vec[i].clear();
        }
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){
                vis[i][j]=false;
            }
        }
    }
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 5996kb

input:

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

output:

3
1
0
0

result:

ok 4 lines

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 5996kb

input:

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

output:

3
0
0
2
1
1
5
0
0
1
0
7
9
4
4
0
6
5
2
0
1
6
4
5
2
0
0
5
3
3
1
4
1
0
7
5
2
3
9
3
0
6
2
2
2
0
4
6
6
3
5
2
5
5
2
1
0
3
3
4
4
2
2
0
7
6
4
8
5
3
2
5
2
1
2
1
4
0
0
2
5
1
4
6
9
1
6
2
2
5
4
5
2
1
0
1
9
3
4
11
0
3
2
1
0
0
4
3
1
4
3
10
3
0
3
6
2
5
1
3
3
4
0
2
11
2
2
4
0
4
4
6
2
1
2
3
0
5
0
16
4
3
2
6
0
8
3
3
...

result:

wrong answer 7th lines differ - expected: '3', found: '5'