QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#511164 | #7789. Outro: True Love Waits | MCdyc | WA | 4ms | 19468kb | C++20 | 1.9kb | 2024-08-09 17:03:41 | 2024-08-09 17:03:41 |
Judging History
answer
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
using i64 = long long;
const i64 mod = 1e9 + 7;
const int MAXN = 1e6 + 5;
using bs = bitset<MAXN>;
vector<int> mp({ 0, 1, 3, 2 });
int f[MAXN][4];
void init() {
for (int i = 1; i <= 1000000; i++) {
f[i][1] = f[i - 1][1] * 4 + 1;
f[i][1] %= mod;
f[i][2] = f[i - 1][1] * 4 + 3;
f[i][2] %= mod;
f[i][3] = f[i - 1][1] * 4 + 2;
f[i][3] %= mod;
}
}
i64 kpow(i64 x, i64 y) {
i64 res = 1ll;
while (y) {
if (y & 1)
res = res * x % mod;
x = x * x % mod;
y >>= 1;
}
return res;
}
const i64 inv3 = kpow(3, mod - 2);
void solve() {
string s, t;
i64 k;
cin >> s >> t >> k;
bs ss(s), tt(t);
ss ^= tt;
// for (int i = 0; i < 10; i++)
// cerr << ss[i];
// cerr << endl;
int n = (max(s.length(), t.length()) + 1) >> 1;
vector <int> four(0);
// cerr << n << endl;
for (int i = 0; i < n; i++)
four.emplace_back(ss[i * 2] + ss[i * 2 + 1] * 2);
n = four.size();
i64 ans = 0;
for (int i = 0; i < n; i++)
if (four[i])
ans += f[i][four[i]];
i64 cnt = 0;
int w = 0;
while (four[w++] == 0) {
cnt++;
}
if (ss.none()) {
k--;
cout << ((kpow(4ll, k + 1) - 4ll + mod) % mod * inv3 % mod) % mod << endl;
return;
}
if (cnt + 1 < k) {
cout << "-1\n";
return;
}
if (s != t)
k--;
ans = (ans + (kpow(4ll, k + 1) - 4ll + mod) % mod * inv3 % mod) % mod;
cout << ans << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
f[0][0] = 0;
f[0][1] = 1;
f[0][2] = 3;
f[0][3] = 2;
init();
int t = 1;
cin >> t;
while (t--)
solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 4ms
memory: 19404kb
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: 19468kb
input:
1 0 0 1
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: -100
Wrong Answer
time: 3ms
memory: 19396kb
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:
30 31 29 30 7 30 31 3 28 32 3 29 29 8 25 28 29 3 29 24 22 31 30 29 25 27 29 32 30 10 29 9 33 7 23 30 29 28 10 23 29 22 29 30 6 0 23 3 29 7 6 8 32 24 29 31 31 9 23 27 21 30 23 28 21 27 7 24 22 3 29 31 31 29 31 31 29 28 29 30 31 8 30 27 24 10 31 32 8 26 24 30 28 6 8 29 2 28 22 24
result:
wrong answer 1st numbers differ - expected: '78', found: '30'