QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#736010#7789. Outro: True Love WaitsSuhy#WA 5ms11168kbC++171.5kb2024-11-11 23:31:012024-11-11 23:31:01

Judging History

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

  • [2024-11-11 23:31:01]
  • 评测
  • 测评结果:WA
  • 用时:5ms
  • 内存:11168kb
  • [2024-11-11 23:31:01]
  • 提交

answer

#include<cstdio>
typedef long long d64;
const d64 M=1000000007;
int T,n,m,i,k;
d64 x[1000086];
bool A[1000086],B[1000086],*a,*b;
int read(bool *s){
    char c;
    while(c=getchar(),c!='0'&&c!='1');
    int r=0;
    while(c=='0'||c=='1')s[r++]=c-'0',c=getchar();
    return r;
}
void swap(bool &a,bool &b){
    bool c=a;a=b;b=c;
}
int main(){
    x[0]=1;
    for(i=0;i<=1000000;++i)x[i+1]=(4*x[i]+1)%M;
    scanf("%d",&T);
    while(T--){
        a=A;b=B;
        n=read(a);
        m=read(b);
        for(i=0;i+i<n;++i)swap(a[i],a[n-i-1]);
        for(i=0;i+i<m;++i)swap(b[i],b[m-i-1]);
        if(n<m){
            bool *c=a;a=b;b=c;
            i=n;n=m;m=i;
        }
        for(i=0;i<m;++i)a[i]^=b[i];
        scanf("%d",&k);
        int cnt=0;
        for(i=0;i<n;++i)if(a[i])++cnt;
        if(!cnt)printf("%d\n",(x[k-1]+M-1)%M);
        else{
            if(k>2)puts("-1");
            else{
                d64 ans=0;
                if(n&1)++n;
                for(i=0;i+i<n;++i){
                    int d=0;
                    if(a[i+i+1]){
                        if(!a[i+i])++d;
                        d+=2;
                    }else if(a[i+i])++d;
                    ans+=d*x[i];
                }
                if(k==2){
                    if(a[0]||a[1])ans=-1;
                    else (ans+=4)%M;
                }else ans%=M;
                printf("%d\n",ans);
            }
        }
    }
    return 0;
}

详细

Test #1:

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

input:

4
1 10 1
1 10 2
100 0 2
11 11 3

output:

2
-1
9
20

result:

ok 4 number(s): "2 -1 9 20"

Test #2:

score: 0
Accepted
time: 2ms
memory: 10040kb

input:

1
0 0 1

output:

0

result:

ok 1 number(s): "0"

Test #3:

score: -100
Wrong Answer
time: 5ms
memory: 11168kb

input:

100
110111 11111 1
10110 101101 1
11010 111111 1
100110 1 1
10010 11010 1
1100 10111 1
100100 111110 1
101110 101100 1
1011 10110 1
110100 1110 1
11010 11000 1
11110 1000 1
111000 11101 1
110 1001 1
101010 11000 1
10 111110 1
110001 101000 1
1010 1000 1
10101 11 1
111011 11010 1
110001 100000 1
1100...

output:

78
59
69
70
78
59
39
3
53
60
66
50
69
12
45
52
37
3
29
64
22
39
54
69
65
48
33
76
55
81
57
76
81
15
23
70
69
57
18
23
50
42
69
54
6
0
63
3
29
15
10
16
80
24
58
59
71
13
23
31
21
34
23
48
42
47
70
44
42
3
58
75
59
29
55
39
29
28
29
70
55
16
54
47
45
18
79
60
8
26
64
58
32
6
8
37
2
68
42
44

result:

wrong answer 5th numbers differ - expected: '15', found: '78'