QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#675201#7789. Outro: True Love WaitsCalculateloveWA 0ms3700kbC++142.7kb2024-10-25 18:06:482024-10-25 18:06:48

Judging History

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

  • [2024-10-25 18:06:48]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3700kb
  • [2024-10-25 18:06:48]
  • 提交

answer

#include<cstdio>
#include<cstring>
const int N=1000010;
const int mod=1e9+7;
char s[N],t[N],tmp[N];
int max(int x,int y){
	return x>y?x:y;
}
void work(){
	scanf("%s",s),scanf("%s",t);
	int len=max(strlen(s),strlen(t));
    if(len&1)len++;
    int lens=strlen(s),lent=strlen(t);
    for(int i=strlen(s);i<len;i++)s[i]='0';
    for(int i=strlen(t);i<len;i++)t[i]='0';
    for(int i=0;i<lens-i-1;i++){
        char ch=s[i];
        s[i]=s[lens-i-1];
        s[lens-i-1]=ch;
    }
    for(int i=0;i<lent-i-1;i++){
        char ch=t[i];
        t[i]=t[lent-i-1];
        t[lent-i-1]=ch;
    }
    // for(int i=0;i<len;i++)putchar(s[i]);
        // puts("");
	for(int i=0;i<len;i++){
        // tmp[i]=s[len-i-1];
        // putchar(s[i]),putchar(t[i]),puts("");
        if(s[i]==t[i])tmp[i]='0';
        else tmp[i]='1';
		// if(s[i]==t[i])t[i]='0';
		// else t[i]='1';
	}
    for(int i=0;i<len;i++)s[i]=tmp[i];
    // for(int i=0;i<len;i++)putchar(s[i]);
    // puts("");
    int k;
    scanf("%d",&k);
    int ans=0;
    int flag=1;
    for(int i=0;i<len;i++)if(s[i]!='0')flag=0;
	if(k==1){
		for(int i=0,now=1,now1=0;i+1<len;i+=2){
            int x;
            if(s[i]=='0'&&s[i+1]=='0')x=0;
            else if(s[i]=='1'&&s[i+1]=='0')x=1;
            else if(s[i]=='1'&&s[i+1]=='1')x=2;
            else if(s[i]=='0'&&s[i+1]=='1')x=3;
            ans=(ans+1ll*now1*x+x)%mod;
            now=1ll*now*4%mod;
            now1=(now+now1)%mod;
            // printf("%d %d %d %d %d\n",i,now,now1,ans,x);
        }
        printf("%d\n",ans);
	}
    else if(flag){
        k--;
        int now=0,now1=1;
        for(int i=1;i<=k;i++){
            now1=1ll*now1*4%mod;
            now=(now+now1)%mod;
        }
        printf("%d\n",now);
    }
    else {
        int cnt=0;
        if(k>2)puts("-1");
        else {
            int id=0;
            for(int i=0;i<len;i+=2)if(s[i]!='0'||s[i+1]!='0'){
                id=i,cnt++;
            }
            if(cnt>1||id==0){
                puts("-1");
                return ;
            }
            int x;
            if(s[id]=='0'&&s[id+1]=='0')x=0;
            else if(s[id]=='1'&&s[id+1]=='0')x=1;
            else if(s[id]=='1'&&s[id+1]=='1')x=2;
            else if(s[id]=='0'&&s[id+1]=='1')x=3;
            k=id/2;
            int now1=1,now=0;
            for(int i=1;i<=k;i++){
                now1=1ll*now1*4%mod;
                now=(now+now1)%mod;
            }
            printf("%d\n",(1ll*(x+1)*now+x+1+mod-1)%mod);
        }
    }
    for(int i=0;i<len;i++)s[i]=t[i]=tmp[i]=0;
}
int main(){
    // freopen("a.in","r",stdin);
    int t;
    scanf("%d",&t);
    while(t--)work();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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: 0ms
memory: 3700kb

input:

1
0 0 1

output:

0

result:

ok 1 number(s): "0"

Test #3:

score: 0
Accepted
time: 0ms
memory: 1636kb

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
32
60
3
29
69
12
45
52
37
3
29
64
22
39
54
69
65
27
33
76
34
18
57
13
81
15
23
70
69
36
18
23
29
42
69
54
6
0
63
3
29
15
10
16
80
24
37
59
71
13
23
31
21
34
23
48
21
47
7
44
42
3
37
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:

ok 100 numbers

Test #4:

score: -100
Wrong Answer
time: 0ms
memory: 3700kb

input:

100
10011111 111 2
1011101100 1000000100 1
100011111 1001001111 1
1001100101 1100100001 1
10101000 10000100 1
1011110101 100011101 1
110100001 111011010 1
1101001100 1111101101 1
1001101 11011010 1
1101110110 1101011000 1
110011001 1100001111 2
1001111001 1011001111 1
1001110 1101110100 2
1110110100...

output:

-1
248
788
431
73
930
144
319
283
76
-1
305
-1
-1
86
-1
312
293
1293
433
1179
0
884
963
1215
576
-1
1132
499
811
864
949
1322
406
526
862
-1
447
1203
1238
873
-1
-1
1131
1108
438
134
359
80
740
1057
752
31
950
1093
1261
650
235
996
876
504
925
1344
450
1010
273
-1
1144
1041
-1
-1
164
-1
11
798
419
1...

result:

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