QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#618918#7789. Outro: True Love Waitstz3528WA 10ms11580kbC++231.3kb2024-10-07 11:44:382024-10-07 11:44:40

Judging History

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

  • [2024-10-07 11:44:40]
  • 评测
  • 测评结果:WA
  • 用时:10ms
  • 内存:11580kb
  • [2024-10-07 11:44:38]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const long long mod=1e9+7;
long long fastpower(long long a,long long b){
	long long ans=1;
	while(b){
		if(b&1) ans=ans*a%mod;
		a=a*a%mod;
		b/=2;
	}
	return ans;
}
long long f[1000010];
void solve(){
	string s,t;
	int k;
	cin>>s>>t>>k;
	int n=max(t.size(),s.size());
	vector<int> a,b,c;
	for(int i=s.size()-1;i>=0;i--) a.push_back(s[i]-'0');
	for(int i=t.size()-1;i>=0;i--) b.push_back(t[i]-'0');
	for(int i=0;i<n;i++){
		if(i>=a.size()) a.push_back(0);
		if(i>=b.size()) b.push_back(0);
		c.push_back(a[i]^b[i]);
	}
	int cnt=0;
	for(int i=0;i<c.size();i+=2){
		if(i+1==c.size()) c.push_back(0);
		if(c[i]==0&&c[i+1]==0) cnt=i+1;
		else break;
	}
	if(cnt==c.size()/2){
		cout<<(f[k-1]-1+mod)%mod<<endl;
		return ;
	}
	if(k-1>cnt) {
		cout<<-1<<endl;
		return ;
	}
	long long ans=0;
	long long inv3=fastpower(3,mod-2);
	ans=(fastpower(4,k)-4)*inv3%mod;
	for(int i=0;i<c.size();i+=2){
		if(i+1==c.size()) c.push_back(0);
		if(c[i]==1&&c[i+1]==0){
			ans=(ans+1*f[i/2]%mod)%mod;
		}
		if(c[i]==1&&c[i+1]==1){
			ans=(ans+2*f[i/2]%mod)%mod;
		}
		if(c[i]==0&&c[i+1]==1){
			ans=(ans+3*f[i/2]%mod)%mod;
		}
	}
	cout<<ans<<endl;
}
int main(){
	f[0]=1;
	for(int i=1;i<=1000000;i++){
		f[i]=(f[i-1]*4%mod+1)%mod;
	}
	int t;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 3ms
memory: 11324kb

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: 3ms
memory: 11580kb

input:

1
0 0 1

output:

0

result:

ok 1 number(s): "0"

Test #3:

score: -100
Wrong Answer
time: 10ms
memory: 11392kb

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
0
69
54
6
0
0
3
29
15
10
16
80
24
37
59
71
13
23
31
0
34
23
48
0
47
7
44
0
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
0
44

result:

wrong answer 42nd numbers differ - expected: '42', found: '0'