QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#536732 | #7780. Dark LaTeX vs. Light LaTeX | Repeater | TL | 1ms | 3872kb | C++20 | 3.8kb | 2024-08-29 16:05:34 | 2024-08-29 16:05:38 |
Judging History
answer
#include<iostream>
using namespace std;
#include<vector>
#include<map>
using ll = long long;
const int p[2] = {133, 331};
const int mod[2] = {(int)1e9 + 463, (int)1e9 + 469};
long long pn[2][5001];
void init(){
pn[0][0] = pn[1][0] = 1;
for (int i = 1; i <= 5000; ++i){
pn[0][i] = pn[0][i - 1] * p[0] % mod[0];
pn[1][i] = pn[1][i - 1] * p[1] % mod[1];
}
return;
}
vector<pair<ll, ll>> sH, tH;
pair<ll, ll> sget(int l, int r){
pair<ll, ll> s;
s.first = (sH[r].first - sH[l].first * pn[0][r - l] % mod[0] + mod[0]) % mod[0];
s.second = (sH[r].second - sH[l].second * pn[1][r - l] % mod[1] + mod[1]) % mod[1];
return s;
}
pair<ll, ll> tget(int l, int r) {
pair<ll, ll> t;
t.first = (tH[r].first - tH[l].first * pn[0][r - l] % mod[0] + mod[0]) % mod[0];
t.second = (tH[r].second - tH[l].second * pn[1][r - l] % mod[1] + mod[1]) % mod[1];
return t;
}
map<pair<ll, ll>, int> scnt, tcnt;
void solve(){
string s, t;
cin >> s >> t;
s = " " + s, t = " " + t;
sH.resize(s.size());
tH.resize(t.size());
ll ans = 0;
sH[0].first = 0, sH[0].second = 0;
tH[0].first = 0, tH[0].second = 0;
for (int i = 1; i < s.size(); ++i){
sH[i].first = (sH[i - 1].first * p[0] + s[i]) % mod[0];
sH[i].second = (sH[i - 1].second * p[1] + s[i]) % mod[1];
for (int j = 0; j < i; ++j){
++scnt[sget(j, i)];
//cout << j << " " << i << " " << sget(j, i).first << " " << sget(j, i).second << " " << scnt[sget(j, i)] << "\n";
}
}
for (int i = 1; i < t.size(); ++i) {
tH[i].first = (tH[i - 1].first * p[0] + t[i]) % mod[0];
tH[i].second = (tH[i - 1].second * p[1] + t[i]) % mod[1];
for (int j = 0; j < i; ++j) {
pair<ll, ll> tem = tget(j, i);
++tcnt[tem];
ans += scnt[tem];
}
}
vector<vector<ll>> spre(s.size() + 1), tpre(t.size() + 1);
for (int i = 1; i < s.size(); ++i){
spre[i].resize(i + 1);
spre[i][0] = 0;
for (int j = 0; j < i; ++j){
spre[i][j + 1] = spre[i][j] + tcnt[sget(j, i)];
}
}
for (int i = 1; i < t.size(); ++i){
tpre[i].resize(i + 1);
tpre[i][0] = 0;
for (int j = 0; j < i; ++j){
tpre[i][j + 1] = tpre[i][j] + scnt[tget(j, i)];
}
}
vector<int> z(max(s.size(), t.size()));
int l = 0, r = 0;
for (int i = 1; i < s.size(); ++i){
l = i, r = i;
z[i] = s.size() - i;
for (int j = i + 1; j < s.size(); ++j){
z[j] = 0;
if(j <= r){
z[j] = min(r - j + 1, z[i + j - l]);
}
while(j + z[j] < s.size() && s[i + z[j]] == s[j + z[j]]){
l = j;
r = j + z[j];
++z[j];
}
}
for (int j = i + 1; j < s.size(); ++j){
int tem = min(j - i - 1, z[j]);
ans += spre[j - 1][i + tem] - spre[j - 1][i];
}
}
for (int i = 1; i < t.size(); ++i) {
l = i, r = i;
z[i] = t.size() - i;
for (int j = i + 1; j < t.size(); ++j) {
z[j] = 0;
if (j <= r) {
z[j] = min(r - j + 1, z[i + j - l]);
}
while (j + z[j] < t.size() && t[i + z[j]] == t[j + z[j]]) {
l = j;
r = j + z[j];
++z[j];
}
}
for (int j = i + 1; j < t.size(); ++j) {
int tem = min(j - i - 1, z[j]);
ans += tpre[j - 1][i + tem] - tpre[j - 1][i];
}
}
cout << ans << "\n";
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
init();
solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 3872kb
input:
abab ab
output:
8
result:
ok 1 number(s): "8"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3640kb
input:
abab abaaab
output:
29
result:
ok 1 number(s): "29"
Test #3:
score: 0
Accepted
time: 0ms
memory: 3640kb
input:
abcd abcde
output:
10
result:
ok 1 number(s): "10"
Test #4:
score: 0
Accepted
time: 0ms
memory: 3636kb
input:
aaba ba
output:
6
result:
ok 1 number(s): "6"
Test #5:
score: 0
Accepted
time: 0ms
memory: 3820kb
input:
babababaaabbaabababbbaabbbababbaaaaa aaaabbaababbab
output:
1161
result:
ok 1 number(s): "1161"
Test #6:
score: -100
Time Limit Exceeded
input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...