QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#280552#7789. Outro: True Love Waitsucup-team1525#WA 5ms11204kbC++201.5kb2023-12-09 16:54:542023-12-09 16:54:55

Judging History

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

  • [2023-12-09 16:54:55]
  • 评测
  • 测评结果:WA
  • 用时:5ms
  • 内存:11204kb
  • [2023-12-09 16:54:54]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int mod=1e9+7;
const int N=1e6;
int add(int x,int y){ return (x+=y)>=mod?x-mod:x; }
int sub(int x,int y){ return (x-=y)<0?x+mod:x; }
int ksm(ll x,int tp,int s=1){
    for(;tp;x=x*x%mod,tp>>=1) if(tp&1) s=x*s%mod;
    return s;
}
int f[N+5];
void prep(){
    f[1]=4;
    for(int i=2;i<=N;i++)
        f[i]=(3ll*f[i-1]+4)%mod;
}
int n,m,k;
char s[N+5],t[N+5];
int a[N+5];
bool chk0(){
    for(int i=1;i<=n;i++)
        if(a[i]>0) return 0;
    return 1;
}
void solve(){
    scanf("%s %s %d",s+1,t+1,&k);
    n=strlen(s+1); m=strlen(t+1);
    reverse(s+1,s+1+n);
    reverse(t+1,t+1+m);
    for(int i=n+1;i<=max(n,m)+1;i++) s[i]='0';
    for(int i=m+1;i<=max(n,m)+1;i++) t[i]='0';
    // printf("%s\n%s\n",s+1,t+1);
    n=max(n,m);
    for(int i=1;i*2-1<=n;i++){
        a[i]=(s[i<<1]-'0')^(t[i<<1]-'0');
        a[i]<<=1;
        a[i]|=(s[i*2-1]-'0')^(t[i*2-1]-'0');
        // printf("%d",a[i]);
    }
    // puts("");
    n=n+1>>1;
    if(chk0()){
        printf("%d\n",sub(ksm(3,k),(2*k+1)%mod));
        return;
    }
    int ans=0,l=0;
    while(a[l+1]==0) l++;
    for(int i=n;i;i--)
        if(a[i]>0){
            ans=add(ans,f[i-1]+1);
            if(a[i]==2||a[i]==3) ans=add(ans,f[i-1]+1);
            if(a[i]==2) ans=add(ans,f[i-1]+1);
        }
    if(l<k-1) puts("-1");
    else printf("%d\n",add(ans,f[k-1]));
}
int main(){
    prep();
    int t; scanf("%d",&t);
    while(t--) solve();
}

詳細信息

Test #1:

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

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: 10552kb

input:

1
0 0 1

output:

0

result:

ok 1 number(s): "0"

Test #3:

score: -100
Wrong Answer
time: 3ms
memory: 10624kb

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:

66
51
57
58
15
34
35
3
28
52
3
25
57
12
37
44
33
3
25
52
18
35
46
57
53
23
29
64
30
18
49
13
69
15
19
58
57
32
18
19
25
34
57
46
6
0
51
3
25
15
10
16
68
20
33
51
59
13
19
27
17
30
19
40
17
39
7
36
34
3
33
63
51
25
47
35
25
24
25
58
47
16
46
39
20
18
67
52
8
22
52
50
28
6
8
33
2
56
34
36

result:

wrong answer 1st numbers differ - expected: '78', found: '66'