QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#187338#3002. Busy BoardSolitaryDream#WA 552ms121088kbC++202.5kb2023-09-24 16:29:432023-09-24 16:29:43

Judging History

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

  • [2023-09-24 16:29:43]
  • 评测
  • 测评结果:WA
  • 用时:552ms
  • 内存:121088kb
  • [2023-09-24 16:29:43]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define FOR(i,s,t) for(int i=(s),_t=(t); i<=_t; ++i)
#define DOR(i,s,t) for(int i=(s),_t=(t); i>=_t; --i)
typedef long long ll;
typedef double db;
const int N=1005;
char a[N][N];
char b[N][N];
vector<pair<int,int>> E[N][N];
int deg[N][N];
int mark[N][N];
int A[N],B[N];
int cnt1[N],cnt2[N];
queue<pair<int,int>> Q;
int n,m;
set<int> U[N][2],V[N][2];
void upd(int i,int j) {
    mark[i][j]=1;
    if(b[i][j]=='X') {
        --cnt1[i];
        U[i][1].erase(j);
        U[i][0].insert(j);
        if(cnt1[i]<=1) {
            for(auto p: U[i][cnt1[i]]) {
                if((--deg[i][p])==0) {
                    Q.push({i,p});
                }
            }
        }
        --cnt2[j];
        V[j][1].erase(i);
        V[j][0].insert(i);
        if(cnt2[j]<=1) {
            for(auto p: V[j][cnt2[j]]) {
                if((--deg[p][j])==0) {
                    Q.push({p,j});
                }
            }
        }
    } else {
        if((--deg[i][j])) {
            Q.push({i,j});
        }
    }
}
int main() {
    scanf("%d%d",&n,&m);
    FOR(i,1,n) scanf("%s",a[i]+1);
    FOR(i,1,n) scanf("%s",b[i]+1);
    int w=1;
    FOR(i,1,n) FOR(j,1,m) if(a[i][j]!=b[i][j]) {w=0;break;}
    if(w) {
        cout << "1\n";
        return 0;
    }
    FOR(i,1,n) FOR(j,1,m) {
        if(b[i][j]=='X') {
            cnt1[i]++,cnt2[j]++;
            U[i][1].insert(j);
            V[j][1].insert(i);
            deg[i][j]=2;
        } else {
            U[i][0].insert(j);
            V[j][0].insert(i);
            deg[i][j]=3;
        }
    }
    FOR(i,1,n) {
        if(cnt1[i]<=1) {
            for(auto p: U[i][cnt1[i]]) {
                if((--deg[i][p])==0) {
                    Q.push({i,p});
                }
            }
        }
    }
    FOR(j,1,m) {
        if(cnt2[j]<=1) {
            for(auto p: V[j][cnt2[j]]) {
                if((--deg[p][j])==0) {
                    Q.push({p,j});
                }
            }
        }
    }
    while(Q.size()) {
        auto [i,j]=Q.front();
        Q.pop();
        if(A[i]==0) {
            A[i]=1;
            FOR(k,1,m) if(!mark[i][k]) upd(i,k);
        }
        if(B[j]==0) {
            B[j]=1;
            FOR(k,1,n) if(!mark[k][j]) upd(k,j);
        }
    }
    int res=1;
    int c=0;
    FOR(i,1,n) FOR(j,1,m) {
        if(!A[i] && !B[j]) res&=(a[i][j]==b[i][j]);
        if(A[i] && B[j] && a[i][j]=='O') c=1;
    }
    res&=c;
    cout << res << '\n';
    return 0;
}

詳細信息

Test #1:

score: 0
Wrong Answer
time: 552ms
memory: 121088kb

input:

769 998
OOOOXOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOOXOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOOOOOOXOOOOOOOOOOOOOOOOOOXOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOXOOOOOOOOOOOOOOOOOOOO...

output:

1

result:

wrong answer expected 0, found 1