QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#561703#7900. Gifts from Knowledgerotcar07WA 13ms36908kbC++201.4kb2024-09-13 09:09:052024-09-13 09:09:05

Judging History

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

  • [2024-09-13 09:09:05]
  • 评测
  • 测评结果:WA
  • 用时:13ms
  • 内存:36908kb
  • [2024-09-13 09:09:05]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
constexpr int maxn=1e6+5;
string s[maxn];
int fa[maxn<<1];
inline int getfa(int x){return fa[x]==x?x:fa[x]=getfa(fa[x]);}
inline void con(int u,int v){
    // cout<<u<<' '<<v<<'\n';
    u=getfa(u),v=getfa(v);
    if(u==v) return;
    fa[v]=u;
}
inline void solve(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>s[i],s[i]=' '+s[i];
    for(int i=1;i<=2*n;i++) fa[i]=i;
    if(m&1){
        int cnt=0;
        for(int i=1;i<=n;i++) cnt+=(s[i][(m+1)/2]-'0');
        if(cnt>1){
            cout<<"0\n";
            return;
        }
    }
    for(int j=1;j<m-j+1;j++){
        vector<pair<int,int>> v;
        for(int i=1;i<=n;i++){
            if(s[i][j]=='1') v.emplace_back(i,0);
            if(s[i][m-j+1]=='1') v.emplace_back(i,1);
        }
        if(v.size()>2) return cout<<"0\n",void();
        if(v.size()<1||v[0].first==v[1].first) continue;
        auto tr=[&](pair<int,int> p,int rev){
            if(rev) p.second^=1;
            return p.first*2-p.second;
        };
        con(tr(v[0],0),tr(v[1],1));
        con(tr(v[0],1),tr(v[1],0));
    }
    int cnt=0;
    for(int i=1;i<=2*n;i++) if(fa[i]==i) cnt++;
    cnt/=2;
    int ans=1;
    while(cnt--) ans=ans*2%1000000007;
    cout<<ans<<'\n';
}
int main(){
    std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t;cin>>t;
    while(t--) solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 4ms
memory: 36820kb

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: 13ms
memory: 35652kb

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: 11ms
memory: 36908kb

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
8
16384
256
1024
1024
8192
4
1
512
512
256
512
8
2
256
16
2048
128
64
16
4096
512
32
32768
8192
32
1024
128
8
4096
32
32768
256
16
16384
8
512
16
2048
8
8
512
1024
64
32
32
8
512
4
8192
256
1024
32768
2
8
512
512
256
32
2
1024
8192
4
64
8
2
16384
32768
16384
1024
4096
16384
16384
128
256
1
4096
...

result:

wrong answer 2nd numbers differ - expected: '16', found: '8'