QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#371933 | #7780. Dark LaTeX vs. Light LaTeX | comeintocalm# | WA | 1014ms | 15940kb | C++17 | 2.7kb | 2024-03-30 18:09:09 | 2024-03-30 18:09:11 |
Judging History
answer
#include <bits/stdc++.h>
const int P = 1e9 + 7;
auto GetNext(std::string &s, const int n) -> std::pair<std::vector<int>, std::vector<int>> {
std::vector<int> nxt(n);
std::vector<int> d(n, 1);
nxt[0] = -1;
for (int i = 1, j = -1; i < n; ++i) {
while (~j && s[i] != s[j + 1])
j = nxt[j];
if (s[i] == s[j + 1])
++j;
nxt[i] = j;
if (~j) {
d[i] = d[j] + 1;
}
}
return {nxt, d};
}
auto calc(std::string &s, std::string &t) -> long long {
std::unordered_map<int, int> mp;
int n = (int)s.length();
int m = (int)t.length();
for (int i = 0; i < m; ++i) {
int ha = 0;
for (int j = i; j < m; ++j) {
ha = (137ll * ha + (t[j] - 'a' + 1)) % P;
++mp[ha];
}
}
long long ret = 0;
std::vector<int> base(n);
base[0] = 1;
for (int i = 1; i < n; ++i)
base[i] = 137ll * base[i - 1] % P;
for (int R = 0; R + 1 < n; ++R) {
auto o = std::move(s.substr(R + 1, n));
auto [nxt, dep] = std::move(GetNext(o, n - R));
std::vector<int> d(R + 1);
for (int i = 0, j = -1; i < R; ++i) {
while (~j && (s[i] != o[j + 1] || j + 1 >= n - R)) {
j = nxt[j];
}
if (s[i] == o[j + 1])
++j;
if (~j) {
// printf("i: %d R: %d j: %d\n", i, R, j);
d[i] = dep[j];
}
}
int ha = 0;
for (int i = R; i > 0; --i) {
ha = (ha + 1ll * base[R - i] * (s[i] - 'a' + 1) % P) % P;
if (mp.find(ha) != mp.end()) {
ret += 1ll * mp[ha] * d[i - 1];
}
// printf("hash %d i:%d d[i-1]: %d\n", ha, i, d[i - 1]);
}
}
return ret;
}
auto qwq(std::string &s, std::string &t) -> long long {
std::unordered_map<int, int> mp;
int n = (int)s.length();
int m = (int)t.length();
for (int i = 0; i < m; ++i) {
int ha = 0;
for (int j = i; j < m; ++j) {
ha = (137ll * ha + (t[j] - 'a' + 1)) % P;
++mp[ha];
}
}
long long ret = 0;
for (int i = 0; i < n; ++i) {
int ha = 0;
for (int j = i; j < n; ++j) {
ha = (137ll * ha + (s[j] - 'a' + 1)) % P;
if (mp.find(ha) != mp.end()) {
ret += mp[ha];
}
}
}
return ret;
}
int main() {
// freopen("d.in", "r", stdin);
// freopen("d.out", "w", stdout);
std::string s, t;
std::cin >> s >> t;
long long ans = qwq(s, t);
ans += calc(s, t);
ans += calc(t, s);
// std::cout << calc(s, t) << ' ' << calc(t, s) << ' ' << qwq(s, t) << std::endl;
std::cout << ans << std::endl;
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3512kb
input:
abab ab
output:
8
result:
ok 1 number(s): "8"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3576kb
input:
abab abaaab
output:
29
result:
ok 1 number(s): "29"
Test #3:
score: 0
Accepted
time: 1ms
memory: 3568kb
input:
abcd abcde
output:
10
result:
ok 1 number(s): "10"
Test #4:
score: 0
Accepted
time: 1ms
memory: 3476kb
input:
aaba ba
output:
6
result:
ok 1 number(s): "6"
Test #5:
score: 0
Accepted
time: 1ms
memory: 3796kb
input:
babababaaabbaabababbbaabbbababbaaaaa aaaabbaababbab
output:
1161
result:
ok 1 number(s): "1161"
Test #6:
score: 0
Accepted
time: 1014ms
memory: 3932kb
input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
78156256250000
result:
ok 1 number(s): "78156256250000"
Test #7:
score: -100
Wrong Answer
time: 185ms
memory: 15940kb
input:
gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...
output:
60719865
result:
wrong answer 1st numbers differ - expected: '60716448', found: '60719865'