QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#723732#7789. Outro: True Love WaitsharlemWA 1ms5640kbC++141.8kb2024-11-07 23:57:572024-11-07 23:57:58

Judging History

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

  • [2024-11-07 23:57:58]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5640kb
  • [2024-11-07 23:57:57]
  • 提交

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'