QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#723732 | #7789. Outro: True Love Waits | harlem | WA | 1ms | 5640kb | C++14 | 1.8kb | 2024-11-07 23:57:57 | 2024-11-07 23:57:58 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
const ll mod=1e9+7;
const ll inv3=333333336;
string s,t;int k;
int xo[N],so[N>>1];
// ll sk[N];
ll ans;
int tim[4]={0,1,3,2};
// void init(int num){
// ll tad=1;
// sk[0]=tad;
// for(int i=1;i<=num;i++){
// tad=tad*4%mod;
// sk[i]=(sk[i-1]+tad)%mod;
// }
// }
ll qpow(ll a,int b){
ll res=1;
while(b){
if(b&1)res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
ll sk(ll k){
return (qpow(4,k+1)-1+mod)%mod*inv3%mod;
}
void solve(){
ans=0;
cin>>s>>t>>k;
reverse(s.begin(),s.end());
reverse(t.begin(),t.end());
int n=max(s.size(),t.size());
for(int i=0;i<n;i++){
if(i>=s.size())xo[i]=t[i]-'0';
else if(i>=t.size())xo[i]=s[i]-'0';
else xo[i]=(s[i]-'0')^(t[i]-'0');
so[i]=0;
}
int m=-1,zr=-1;
for(int i=0;i<n;i++){
if(i&1)(so[i>>1]|=(xo[i]<<1));
else (so[i>>1]|=xo[i]);
if(so[i>>1]>0){
m=(i>>1);
if(zr==-1)zr=(i>>1);
}
}
m++;
if(m==0){
cout<<sk(k-1)-1<<"\n";
return;
}
// cout<<k<<" "<<zr<<"\n";
if(k>zr+1){
cout<<-1<<"\n";
return;
}
for(int i=0;i<m;i++){
ans=(ans+sk(i))*tim[so[i]]%mod;
}
ans=(ans+sk(k-1)-1+mod)%mod;
cout<<ans<<"\n";
}
int main(){
// freopen("wait.in","r",stdin);
// freopen("wait.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
// init(1e6);
int t;cin>>t;
while(t--)solve();
return 0;
}
/*
1
10011001111000111101010100011110000010100001011111 10011001111000111101010100011110000010100001011111 1000000000
*/
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 5640kb
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: 3588kb
input:
1 0 0 1
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: -100
Wrong Answer
time: 1ms
memory: 5636kb
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:
108 84 81 84 15 42 45 3 33 90 3 29 81 14 42 62 39 3 29 63 21 45 70 81 63 27 35 111 37 24 72 16 135 15 21 84 81 36 24 21 29 42 81 70 6 0 63 3 29 15 10 18 126 21 39 84 87 16 21 31 21 37 21 54 21 52 7 42 42 3 39 105 84 29 74 45 29 28 29 84 74 18 70 52 21 24 117 90 8 26 63 78 33 6 8 39 2 78 42 42
result:
wrong answer 1st numbers differ - expected: '78', found: '108'