QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#279914 | #7780. Dark LaTeX vs. Light LaTeX | ucup-team2279# | TL | 1ms | 6000kb | C++14 | 1.5kb | 2023-12-09 11:48:02 | 2023-12-09 11:48:03 |
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];
vector<ull> v;
ull val(int l,int r) {return h[r]-h[l-1]*p[r-l+1];}
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;
for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) c[i][j]+=c[i][j-1];
for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) v.push_back(val(i,j));
sort(begin(v),end(v));
}
int ask(ull x){
return upper_bound(begin(v),end(v),x)-lower_bound(begin(v),end(v),x);
}
}A,B;
int main(){
for(int i=p[0]=1;i<N;i++) p[i]=p[i-1]*b;
A.init();B.init();
long long ans=0;
for(int i=1;i<=A.n;i++) for(int j=1;j<=i;j++) ans+=A.c[i][j]*B.ask(A.val(j,i));
for(int i=1;i<=B.n;i++) for(int j=1;j<=i;j++) ans+=(B.c[i][j]-1)*A.ask(B.val(j,i));
cout<<ans;
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 5864kb
input:
abab ab
output:
8
result:
ok 1 number(s): "8"
Test #2:
score: 0
Accepted
time: 1ms
memory: 5952kb
input:
abab abaaab
output:
29
result:
ok 1 number(s): "29"
Test #3:
score: 0
Accepted
time: 1ms
memory: 5872kb
input:
abcd abcde
output:
10
result:
ok 1 number(s): "10"
Test #4:
score: 0
Accepted
time: 1ms
memory: 6000kb
input:
aaba ba
output:
6
result:
ok 1 number(s): "6"
Test #5:
score: 0
Accepted
time: 1ms
memory: 5996kb
input:
babababaaabbaabababbbaabbbababbaaaaa aaaabbaababbab
output:
1161
result:
ok 1 number(s): "1161"
Test #6:
score: -100
Time Limit Exceeded
input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...