QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#591576 | #7780. Dark LaTeX vs. Light LaTeX | solar_express# | WA | 407ms | 138360kb | C++23 | 3.4kb | 2024-09-26 16:34:04 | 2024-09-26 16:34:06 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
string s, t;
template<uint32_t base, uint32_t mod>
struct str_hash {
vector<uint32_t> pw, _H;
str_hash() = default;
str_hash(const string &s) : pw(s.size()), _H(s.size()+1) {
assert(!s.empty());
pw[0] = 1;
_H[1] = s[0];
for (size_t i = 1; i < s.size(); ++i) {
pw[i] = 1ll*pw[i-1]*base%mod;
_H[i+1] = (1ll*_H[i]*base+s[i])%mod;
}
}
uint32_t operator()(int l, int r) {
// --l, --r;
// if (!l) return _H[r];
// cerr<<l<<" "<<r<<endl;
return (_H[r]-1ll*_H[l-1]*pw[r-l+1]%mod+mod)%mod;
}
};
const int N = 5005;
int lcp[N];
#include <bits/extc++.h>
using namespace __gnu_pbds;
gp_hash_table<long, int> cnt;
int c[N][N];
int main() {
// freopen("D.in","r",stdin);
// freopen("D.out","w",stdout);
cin.tie(0);
ios::sync_with_stdio(false);
cin >> s >> t;
str_hash<983, 2042021819> S(s), T(t);
int64_t ans = 0;
for (int i = 1; i <= t.size(); ++i) for (int j=i;j<=t.size();++j) ++cnt[T(i,j)];
// for (int i = 1; i <= s.size(); ++i) for (int j=i;j<=s.size();++j) ans+=cnt[S(i,j)];
for (int l = 1; l <= s.size(); ++l) {
int n = s.size()-l+1;
int mx=1, pt=1; lcp[l]=n;
for (int i = 2; i <= n; ++i) {
if (i<=mx) lcp[i+l-1]=min(lcp[i-pt+l],mx-i+1);
// cerr<<i<<" "<<mx<<" "<<i+lcp[i+l-1]<<" "<<s[i+lcp[i+l-1]+l-1]<<" "<<s[l+lcp[i+l-1]]<<endl;
while(i+lcp[i+l-1]<=n && s[i+lcp[i+l-1]+l-2]==s[l+lcp[i+l-1]-1]) ++lcp[i+l-1];
if(i+lcp[i+l-1]-1>mx) pt=i, mx=i+lcp[i+l-1]-1;
}
// ++c[l][l];
++c[l][(int)s.size()];
--c[l+1][(int)s.size()];
for (int r = l+1; r<=s.size(); ++r) {
++c[l][r-1];
--c[l+1][r-1];
if(lcp[r]>0){
// cerr<<l<<" "<<r<<" "<<lcp[r]<<endl;
int rm=min(r-1,l+lcp[r]);
if(rm>=l+1){
++c[l+1][r-1];
--c[rm+1][r-1];
}
}
}
memset(lcp,0,sizeof(lcp));
// cerr<<endl;
}
for (int r = 1; r <= s.size(); ++r) {
long C = 0;
for (int l = 1; l <= r; ++l) {
C += c[l][r];
// cerr<<l<<" "<<r<<" "<<C<<" "<<cnt[S(l,r)]<<'\n';
// cerr<<ans<<endl;
ans += C * cnt[S(l,r)];
// cerr<<ans<<endl;
}
}
// cerr<<ans<<endl;
memset(c, 0, sizeof(c));
cnt.clear();
swap(s, t);
swap(S, T);
for (int i = 1; i <= t.size(); ++i) for (int j=i;j<=t.size();++j) ++cnt[T(i,j)];
for (int l = 1; l <= s.size(); ++l) {
int n = s.size()-l+1;
int mx=1, pt=1; lcp[l]=n;
for (int i = 2; i <= n; ++i) {
if (i<=mx) lcp[i+l-1]=min(lcp[i-pt+l],mx-i+1);
// cerr<<i<<" "<<mx<<" "<<i+lcp[i+l-1]<<" "<<s[i+lcp[i+l-1]+l-1]<<" "<<s[l+lcp[i+l-1]]<<endl;
while(i+lcp[i+l-1]<=n && s[i+lcp[i+l-1]+l-2]==s[l+lcp[i+l-1]-1]) ++lcp[i+l-1];
if(i+lcp[i+l-1]-1>mx) pt=i, mx=i+lcp[i+l-1]-1;
}
for (int r = l+1; r<=s.size(); ++r) {
// cerr<<l<<" "<<r<<" "<<lcp[r]<<'\n';
if(lcp[r]>0){
int rm=min(r-1,l+lcp[r]);
if(rm>=l+1){
++c[l+1][r-1];
--c[rm+1][r-1];
}
}
}
memset(lcp,0,sizeof(lcp));
// cerr<<endl;
}
for (int r = 1; r <= s.size(); ++r) {
long C = 0;
for (int l = 1; l <= r; ++l) {
C += c[l][r];
if(C)ans += C * cnt[S(l,r)];
// cerr<<l<<" "<<r<<" "<<C<<" "<<cnt[S(l,r)]<<'\n';
}
}
cout << ans << '\n';
return 0;
}
/*
abab
abaaab
*/
詳細信息
Test #1:
score: 100
Accepted
time: 3ms
memory: 101480kb
input:
abab ab
output:
8
result:
ok 1 number(s): "8"
Test #2:
score: 0
Accepted
time: 4ms
memory: 101392kb
input:
abab abaaab
output:
29
result:
ok 1 number(s): "29"
Test #3:
score: 0
Accepted
time: 0ms
memory: 101440kb
input:
abcd abcde
output:
10
result:
ok 1 number(s): "10"
Test #4:
score: 0
Accepted
time: 4ms
memory: 101484kb
input:
aaba ba
output:
6
result:
ok 1 number(s): "6"
Test #5:
score: 0
Accepted
time: 10ms
memory: 101644kb
input:
babababaaabbaabababbbaabbbababbaaaaa aaaabbaababbab
output:
1161
result:
ok 1 number(s): "1161"
Test #6:
score: 0
Accepted
time: 407ms
memory: 101784kb
input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
78156256250000
result:
ok 1 number(s): "78156256250000"
Test #7:
score: -100
Wrong Answer
time: 64ms
memory: 138360kb
input:
gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...
output:
60717881
result:
wrong answer 1st numbers differ - expected: '60716448', found: '60717881'