QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#302851 | #7780. Dark LaTeX vs. Light LaTeX | ucup-team173# | TL | 857ms | 297548kb | C++17 | 2.9kb | 2024-01-11 14:11:20 | 2024-01-11 14:11:21 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define Mp make_pair
#define SZ(x) (int((x).size()))
typedef long long ll;
typedef double db;
typedef vector<int> vi;
typedef pair<int, int> pii;
const int MAXN = 5005, Mod1 = 998244353, Mod2 = 1e9 + 7, base = 131;
string S, T;
int n, m;
struct Hash{
int val1, val2;
Hash(int val = 0) : val1(val), val2(val) {}
Hash(int val1, int val2) : val1(val1), val2(val2) {}
};
Hash operator + (Hash a, Hash b) {
return Hash((a.val1 + b.val1) % Mod1, (a.val2 + b.val2) % Mod2);
}
Hash operator * (Hash a, Hash b) {
return Hash(1ll * a.val1 * b.val1 % Mod1, 1ll * a.val2 * b.val2 % Mod2);
}
long long get(Hash t) {
return 1ll * t.val1 * Mod2 + t.val2;
}
unordered_map<ll, int> cntS, cntT;
int lcp[MAXN][MAXN], f[MAXN][MAXN];
int sum[MAXN][MAXN];
void solve() {
cin >> S >> T;
n = S.size(), m = T.size();
for(int i = 0; i < n; i++) {
Hash now = 0;
for(int j = i; j < n; j++) {
now = now * base + S[j], cntS[get(now)]++;
}
}
for(int i = 0; i < m; i++) {
Hash now = 0;
for(int j = i; j < m; j++) {
now = now * base + T[j], cntT[get(now)]++;
}
}
ll ans = 0;
for(int i = 0; i < n; i++) {
Hash now = 0;
for(int j = i; j < n; j++) {
now = now * base + S[j];
if(cntT.count(get(now))) f[i][j] = cntT[get(now)];
else f[i][j] = 0;
ans += f[i][j];
}
}
for(int i = 0; i < n; i++) for(int j = 0; j < n; j++)
sum[i][j] = (i == 0 ? 0 : sum[i - 1][j]) + f[i][j];
// cout << ans << '\n';
memset(lcp, 0, sizeof(lcp));
for(int l = n - 1; l >= 0; l--) {
for(int r = l + 1; r < n; r++) {
if(S[l] == S[r]) lcp[l][r] = lcp[l + 1][r + 1] + 1; else lcp[l][r] = 0;
if(lcp[l][r] > 0) {
ans += sum[l + lcp[l][r]][r - 1] - sum[l][r - 1];
}
}
}
for(int i = 0; i < m; i++) {
Hash now = 0;
for(int j = i; j < m; j++) {
now = now * base + T[j];
if(cntS.count(get(now))) f[i][j] = cntS[get(now)];
else f[i][j] = 0;
}
}
for(int i = 0; i < m; i++) for(int j = 0; j < m; j++)
sum[i][j] = (i == 0 ? 0 : sum[i - 1][j]) + f[i][j];
memset(lcp, 0, sizeof(lcp));
for(int l = m - 1; l >= 0; l--) {
for(int r = l + 1; r < m; r++) {
if(T[l] == T[r]) lcp[l][r] = lcp[l + 1][r + 1] + 1; else lcp[l][r] = 0;
if(lcp[l][r] > 0) ans += sum[l + lcp[l][r]][r - 1] - sum[l][r - 1];
}
}
cout << ans << '\n';
}
signed main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int t = 1;
// cin >> t;
while(t--) solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 8ms
memory: 104076kb
input:
abab ab
output:
8
result:
ok 1 number(s): "8"
Test #2:
score: 0
Accepted
time: 8ms
memory: 103860kb
input:
abab abaaab
output:
29
result:
ok 1 number(s): "29"
Test #3:
score: 0
Accepted
time: 15ms
memory: 105256kb
input:
abcd abcde
output:
10
result:
ok 1 number(s): "10"
Test #4:
score: 0
Accepted
time: 12ms
memory: 105308kb
input:
aaba ba
output:
6
result:
ok 1 number(s): "6"
Test #5:
score: 0
Accepted
time: 7ms
memory: 105428kb
input:
babababaaabbaabababbbaabbbababbaaaaa aaaabbaababbab
output:
1161
result:
ok 1 number(s): "1161"
Test #6:
score: 0
Accepted
time: 857ms
memory: 297548kb
input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
78156256250000
result:
ok 1 number(s): "78156256250000"
Test #7:
score: 0
Accepted
time: 127ms
memory: 165396kb
input:
gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...
output:
60716448
result:
ok 1 number(s): "60716448"
Test #8:
score: 0
Accepted
time: 132ms
memory: 164260kb
input:
mlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllml...
output:
60679828
result:
ok 1 number(s): "60679828"
Test #9:
score: -100
Time Limit Exceeded
input:
vbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvb...