QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#622630 | #7789. Outro: True Love Waits | LightFeather | WA | 1ms | 3824kb | C++20 | 2.1kb | 2024-10-08 23:30:02 | 2024-10-08 23:30:02 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
typedef vector<int> VI;
typedef pair<int, int> PII;
typedef long long ll;
typedef unsigned long long ull;
const int mod=1e9+7;
constexpr int N = 2e6 + 10, inf = 1e18;
int a[N];
int por(int x,int y){
int cnt=1,sum=x;
while(y){
if(y&1) cnt=cnt*sum%mod;
sum=sum*sum%mod;
y>>=1;
}
return cnt;
}
void solve() {
int k;
string s, t, ob;
cin >> s >> t;
cin>>k;
ob.resize(max(s.size(), t.size()));
int idx1 = s.size() - 1, idx2 = t.size() - 1;
for(int i = ob.size() - 1; i >= 0; i --){
ob[i] = 0;
if(idx1 >= 0)
ob[i] ^= s[idx1 --] - '0';
if(idx2 >= 0)
ob[i] ^= t[idx2 --] - '0';
ob[i] += '0';
}
if(ob.size()%2) ob="0"+ob;
reverse(ob.begin(),ob.end());
int x=ob.size()-1;
while(ob.size()>2&&ob[x]=='0'&&ob[x-1]=='0'){
ob.pop_back();
ob.pop_back();
x-=2;
}
if(ob=="00"){
int ans=(4*(por(4,k-1)-1)%mod)*por(3,mod-2)%mod;
cout<<ans<<endl;
return ;
}
int cnt=ob.size()/2-1;
int sum=(4*(por(4,cnt)-1)%mod)*por(3,mod-2)%mod,ans=sum;
for(int i=ob.size()-1;i>=0;i-=2){
if(ob[i]=='0'&&ob[i-1]=='1') ans=ans+1;
if(ob[i]=='1'&&ob[i-1]=='1') ans=(ans+1+sum+1)%mod;
if(ob[i]=='1'&&ob[i-1]=='0') ans=(ans+1+sum+1+sum+1)%mod;
if(cnt>0) sum=((sum-por(4,cnt))%mod+mod)%mod;
cnt--;
}
int num=0;
for(int i=0;i<ob.size();i++){
if(ob[i]=='0') num++;
else break;
}
if(num%2) num--;
// cout<<num<<endl;
if(k==1){
cout<<ans<<endl;
return ;
}
if(k>(num/2)+1){
cout<<-1<<endl;
}
else{
ans=(ans+(4*(por(4,k-1)-1)%mod)*por(3,mod-2)%mod)%mod;
cout<<ans<<endl;
}
}
signed main() {
// ios::sync_with_stdio(false);
// cin.tie(nullptr);
// cout.tie(nullptr);
int t = 1;
cin >> t;
while(t --)
solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3792kb
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: 3824kb
input:
1 0 0 1
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: -100
Wrong Answer
time: 1ms
memory: 3480kb
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:
74 55 65 66 15 34 35 3 28 56 3 25 65 12 45 48 33 3 25 64 22 35 50 65 65 23 29 72 30 18 53 13 77 15 23 66 65 32 18 23 25 42 65 50 6 0 63 3 25 15 10 16 76 24 33 55 67 13 23 27 21 30 23 44 21 43 7 44 42 3 33 71 55 25 51 35 25 24 25 66 51 16 50 43 24 18 75 56 8 22 64 54 28 6 8 33 2 64 42 44
result:
wrong answer 1st numbers differ - expected: '78', found: '74'