QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#280591 | #7789. Outro: True Love Waits | ucup-team1525# | WA | 7ms | 14712kb | C++20 | 1.6kb | 2023-12-09 17:08:54 | 2023-12-09 17:08:54 |
Judging History
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],sf[N+5];
void prep(){
f[1]=4; sf[1]=4;
for(int i=2;i<=N;i++){
f[i]=(3ll*sf[i-1]+4)%mod;
sf[i]=add(sf[i-1],f[i]);
}
}
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",1ll*sub(ksm(4,k),4)*(mod+1)/3%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,sf[k-1]));
}
int main(){
prep();
int t; scanf("%d",&t);
while(t--) solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 14096kb
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: 13748kb
input:
1 0 0 1
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: -100
Wrong Answer
time: 7ms
memory: 14712kb
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'