QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#279935 | #7780. Dark LaTeX vs. Light LaTeX | ucup-team2279# | TL | 1ms | 8080kb | C++14 | 1.6kb | 2023-12-09 12:31:05 | 2023-12-09 12:31:06 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
using ull=unsigned long long;
const int N=5005,b=229;
ull p[N];
struct sb{
int n,ht[N],sa[N*2],rk[N*2],t[N*2],c[N][N];
char s[N*2];
ull h[N];
ull val(int l,int r) {return h[r]-h[l-1]*p[r-l+1];}
vector<pair<ull,int>> v;
void init(){
scanf("%s",s+1);
n=strlen(s+1);
for(int i=1;i<=n;i++) h[i]=h[i-1]*b+s[i],sa[i]=i,rk[i]=s[i];
for(int w=1;w<n;w<<=1){
sort(sa+1,sa+n+1,[&](int x,int y){
return rk[x]==rk[y]?rk[x+w]<rk[y+w]:rk[x]<rk[y];
});
memcpy(t,rk,sizeof rk);
for(int i=1,k=0;i<=n;i++)
if(t[sa[i]]==t[sa[i-1]]&&t[sa[i]+w]==t[sa[i-1]+w]) rk[sa[i]]=k;
else rk[sa[i]]=++k;
}
for(int i=1,k=0;i<=n;i++){
if(k) k--;
while(s[i+k]==s[sa[rk[i]-1]+k]) k++;
ht[rk[i]]=k;
}
for(int i=1;i<n;i++){
int mi=n;
for(int j=i+1;j<=n;j++){
mi=min(mi,ht[j]);
int x=sa[i],y=sa[j];
if(x>y) swap(x,y);
c[--y][x]++;c[y][x+mi+1]--;
}
}
c[n][1]=1;v.reserve(n*(n+1)/2);
for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) v.push_back({val(j,i),c[i][j]+=c[i][j-1]});
sort(begin(v),end(v));
}
}A,B;
int main(){
for(int i=p[0]=1;i<N;i++) p[i]=p[i-1]*b;
A.init();B.init();
int sa=A.v.size(),sb=B.v.size();
long long ans=0;
for(int i=0,j=0;i<sa||j<sb;){
ull o;
if(i==sa) o=B.v[j].first;
else if(j==sb) o=A.v[i].first;
else o=min(B.v[j].first,A.v[i].first);
int ta=0,ca=0,tb=0,cb=0;
while(i<sa&&A.v[i].first==o) ta++,ca+=A.v[i++].second;
while(j<sb&&B.v[j].first==o) tb++,cb+=B.v[j++].second;
ans+=1ll*ca*tb+1ll*cb*ta-ta*tb;
}
cout<<ans;
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 5916kb
input:
abab ab
output:
8
result:
ok 1 number(s): "8"
Test #2:
score: 0
Accepted
time: 1ms
memory: 7960kb
input:
abab abaaab
output:
29
result:
ok 1 number(s): "29"
Test #3:
score: 0
Accepted
time: 0ms
memory: 5924kb
input:
abcd abcde
output:
10
result:
ok 1 number(s): "10"
Test #4:
score: 0
Accepted
time: 1ms
memory: 8080kb
input:
aaba ba
output:
6
result:
ok 1 number(s): "6"
Test #5:
score: 0
Accepted
time: 1ms
memory: 5864kb
input:
babababaaabbaabababbbaabbbababbaaaaa aaaabbaababbab
output:
1161
result:
ok 1 number(s): "1161"
Test #6:
score: -100
Time Limit Exceeded
input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...