QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#662175 | #7789. Outro: True Love Waits | xiaoxiao__ | WA | 7ms | 19284kb | C++20 | 2.4kb | 2024-10-20 21:43:25 | 2024-10-20 21:43:26 |
Judging History
answer
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<cmath>
#include<bitset>
#include<cstring>
#include<queue>
#define fst first
#define sec second
using namespace std;
using ll=long long;
typedef pair<int,int>pii;
const int N=1e6+10;
map<string,int>mp;
const ll mod=1e9+7;
ll pw[N],pre[N];
void init(int n){
pw[0]=1;
pre[0]=0;
for(int i=1;i<=n;i++)pw[i]=pw[i-1]*4%mod;
for(int i=1;i<=n;i++)pre[i]=(pre[i-1]+pw[i])%mod;
}
ll qpow(ll x,ll y){
ll res=1;
while(y){
if(y&1)res=res*x%mod;
x=x*x%mod;
y>>=1;
}
return res;
}
ll inv(ll x){
return qpow(x,mod-2);
}
ll mo(ll x){
return (x%mod+mod)%mod;
}
void Silverwolf(){
string s,t;
int k;
cin>>s>>t>>k;
int f=0;
if(s.length()<t.length())swap(s,t),f=1;
reverse(s.begin(),s.end());
reverse(t.begin(),t.end());
while(t.length()<s.length())t.push_back('0');
reverse(s.begin(),s.end());
reverse(t.begin(),t.end());
if(f)swap(s,t);
//确保位数相等
int n=s.length();
for(int i=0;i<n;i++){
s[i]=(s[i]-'0')^(t[i]-'0')+'0';
}
//cout<<s<<'\n';
int cnt=0;
ll ans=0;
//算出第一次从0->s的贡献
for(int i=n-1;i>=0;i-=2){
string tmp="00";
tmp[1]=s[i];
if(i-1>=0)tmp[0]=s[i-1];
//cout<<mp[tmp]<<' '<<s[0]<<' ';
//cout<<s[0]<<' '<<mp[tmp]<<'\n';
//cout<<tmp<<'\n';
ans=(ans+pre[cnt++]*mp[tmp]%mod+mp[tmp])%mod;
//cout<<ans<<'\n';
}
int flag=0;
int flag2=0;
for(int i=n-1;i>=0;i--){
if(s[i]=='1'){
flag2=1;
break;
}
flag++;
}
//flag=(flag+1)/2;
if(!flag2)flag=1e9+7;
k--;
if(flag<k)return cout<<-1<<'\n',void();
ans=(ans+mo(qpow(4,k+1)-4)*inv(3)%mod)%mod;
cout<<ans<<'\n';
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
mp["00"]=0;
mp["01"]=1;
mp["11"]=2;
mp["10"]=3;
init(1e6);
int T;cin>>T;while(T--)
Silverwolf();
//愿艾利欧三度为你窥见,令你的生命永不停歇,骇入永远成功,游戏永远胜利。
//游戏就只是为了游戏,仅此而已
//acm这种东西,三两下搞定就好啦
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 3ms
memory: 19284kb
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: 7ms
memory: 19208kb
input:
1 0 0 1
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: 0
Accepted
time: 6ms
memory: 19208kb
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: 3ms
memory: 19208kb
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:
295 248 788 431 73 930 144 319 283 76 1311 305 746 -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 411 1144 1041 717 949 164 -1 11 79...
result:
wrong answer 11th numbers differ - expected: '-1', found: '1311'