QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#603566#7900. Gifts from KnowledgeDoubeecatWA 23ms9884kbC++232.3kb2024-10-01 17:22:142024-10-01 17:22:14

Judging History

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

  • [2024-10-01 17:22:14]
  • 评测
  • 测评结果:WA
  • 用时:23ms
  • 内存:9884kb
  • [2024-10-01 17:22:14]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair <int,int>
#define endl '\n'
const int N = 2e6 + 10;
const ll mod=1e9+7;
vector <vector<int> > a;
int r,c;
char s[N];
int ck[N],tmp[N];
int p[N];
int find(int x){
    if(x!=p[x]){
        p[x]=find(p[x]);
    }
    return p[x];
}
ll qsm(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1)res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
void U(int a,int b){
    if(a!=b){
        p[a]=b;
    }
}
void solve() {
    cin >> r >> c;
    a.clear();
    for(int i=1;i<=2*r;i++){
        ck[i]=0;
        p[i]=i;
    }
    a.resize(r+1);
    for (int i = 1;i <= r;++i) {
        cin >> s;
        a[i].resize(c+1);
        for (int j = 0;j < c;++j) {
            a[i][j+1] = s[j] - '0';
        }
    }

    for(int i=1;i<=c;i++){
        int cnt=0;
        for(int j=1;j<=r;j++){
            if(a[j][i]==1)cnt++;
            if(a[j][c-i+1]==1)cnt++;
        }
        if(cnt>2){
            cout<<0<<endl;
            return;
        }
    }
    for(int i=1;i<=c;i++){
        if(a[1][i]==1){
            ck[i]=1;
        }
    }
    for(int i=2;i<=r;i++){
        for(int j=1;j<=c;j++){
            tmp[j]=ck[j];
        }
        for(int j=1;j<=c;j++){
            int x=j,y=c-j+1;
            if(a[i][j]&&tmp[y]){
                int pd1=tmp[y];
                int px=find(i),py=find(pd1);
                int px1=find(i+r),py1=find(pd1+r);

                if(px==py1||py==px1){
                    cout<<0<<endl;
                    return;
                }
                U(px,py);
                U(px+r,py+r);
            }else if(a[i][j]&&tmp[j]){
                int pd1=tmp[j];
                int px=find(i),py=find(pd1);
                int px1=find(i+r),py1=find(pd1+r);

                if(px==px1||py==py1){
                    cout<<0<<endl;
                    return;
                }

                U(px,py+r);
                U(py,px+r);
            }
            if(a[i][j])ck[j]=i;
        }
    }
    int cnt=0;
    for(int i=1;i<=2*r;i++){
        int pi=find(i);
        if(pi==i)cnt++;
    }
    cnt/=2;
    cout<<qsm(2,cnt)<<endl;
}
signed main() {
    ios::sync_with_stdio(false);
    int T;cin >> T;
    while (T--) solve(); 
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 9752kb

input:

3
3 5
01100
10001
00010
2 1
1
1
2 3
001
001

output:

4
0
2

result:

ok 3 number(s): "4 0 2"

Test #2:

score: 0
Accepted
time: 18ms
memory: 9884kb

input:

15613
10 10
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
15 8
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
1 5
00000
5 9
000000000
000000000
0000...

output:

1024
32768
2
32
32768
128
32
16
16
2
16384
16384
128
128
32768
8192
128
64
16384
2
4
2
4096
16
4096
1024
32768
32768
16384
8
128
2
16
4096
8192
32768
8192
8192
16
16384
16384
256
128
8
256
8
4096
512
2
4
32
32
2
64
512
1024
32768
32768
2
64
16384
16
8192
16
256
16
64
8192
8192
64
1024
2
32768
2
4
51...

result:

ok 15613 numbers

Test #3:

score: -100
Wrong Answer
time: 23ms
memory: 9756kb

input:

15759
9 6
000000
000000
000000
000000
000000
000000
000000
000000
000000
5 15
010000000000000
000000000000000
000000000000000
000100000000000
000100000000000
14 12
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000...

output:

512
16
16384
512
1024
4096
32768
4
2
512
512
512
512
8
2
256
16
4096
512
64
16
4096
512
32
32768
8192
32
2048
128
16
4096
64
32768
256
32
16384
8
512
32
2048
8
16
1024
2048
128
64
32
8
512
8
8192
256
8192
32768
2
8
512
512
256
32
2
2048
8192
8
64
8
2
16384
32768
32768
1024
4096
16384
16384
128
256
4...

result:

wrong answer 568th numbers differ - expected: '4', found: '2'