QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#736054#7789. Outro: True Love WaitsSuhyWA 5ms10980kbC++171.4kb2024-11-11 23:56:512024-11-11 23:56:51

Judging History

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

  • [2024-11-11 23:56:51]
  • 评测
  • 测评结果:WA
  • 用时:5ms
  • 内存:10980kb
  • [2024-11-11 23:56:51]
  • 提交

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;
}
d64 pow(d64 u,d64 d){
    if(!u)return 1;
    d64 r=pow(u>>1,d);
    r*=r;
    if(u&1)(r%=M)*=d;
    return r%M;
}
int gans(){
    int cnt=0;
    for(i=0;i<n;++i)if(a[i])++cnt;
    if(!cnt)return ((pow(k,4)+M-1)*pow(M-2,3)+M-1)%M;
    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];
    }
    bool B=1;
    for(i=0;i<k-1;++i)if(a[i+i]||a[i+i+1])return -1;
    return (ans+x[k-1]+M-1)%M;
}
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);
        printf("%d\n",gans());
        for(i=0;i<n;++i)a[i]=0;
    }
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 10808kb

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: 5ms
memory: 10808kb

input:

1
0 0 1

output:

0

result:

ok 1 number(s): "0"

Test #3:

score: -100
Wrong Answer
time: 2ms
memory: 10980kb

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

result:

wrong answer 9th numbers differ - expected: '32', found: '53'