QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#627312 | #7780. Dark LaTeX vs. Light LaTeX | CCF | ML | 0ms | 0kb | C++14 | 2.3kb | 2024-10-10 15:31:03 | 2024-10-10 15:31:04 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pii pair<int,int>
#define fs first
#define sc second
#define pb push_back
#define endl
#define SZ(X) (int)((X).size())
#define lb(i) ((i)&-(i))
#define cl(i) memset(i,0,sizeof(i))
const int N=6.1e3;
const ll mod=1234567891;
char s[N],t[N];
int qp(int a,int b){
int res=1;
while(b){
if(b&1)res=(ll)res*a%mod;
a=(ll)a*a%mod,b/=2;
}
return res;
}
#define inv(i) qp(i,mod-2)
int lcp0[N][N],lcp1[N][N];
ll cnt[N][N];//cnt i j s[i..j] as B(in ABA)
ll calc(){
int n=strlen(s+1),m=strlen(t+1);
for(int j=n;j>=0;j--){
for(int i=1;i<=j;i++){
if(s[i]!=s[j])lcp0[i][j]=0;
else lcp0[i][j]=1+lcp0[i+1][j+1];
}
}
for(int i=n;i>=0;i--){
for(int j=1;j<=m;j++){
if(s[i]!=t[j])lcp1[i][j]=0;
else lcp1[i][j]=1+lcp1[i+1][j+1];
}
}/*
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)cerr<<lcp1[i][j]<<" ";
cerr<<"\n";
}*/
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n+1;j++){
int l=min(lcp0[i][j],j-i+1);
//[i,j-1]->[i+l,j-1] (++)
cnt[i][j-1]++,cnt[i+l+1][j-1]--;//差分
}
}
for(int j=1;j<=n;j++){
for(int i=1;i<=j;i++)
cnt[i][j]+=cnt[i-1][j];
}
///
/*
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)cerr<<cnt[i][j]<<" ";
cerr<<"\n";
}*/
///
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
cnt[i][j]+=cnt[i][j-1];
//cnt'[i,j] contain [i,i]->[i,j]
}
}
ll ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)if(lcp1[i][j]>0){
//[i,i]->[i,i+lcp1[i][j]] (make sum)
//cerr<<"sum^"<<i<<" "<<i+lcp1[i][j]-1<<"|"<<j<<"\n";
ans+=cnt[i][i+lcp1[i][j]-1]-0;
}
}
return ans;
}
int main(){
//cout<<inv(213121)*213121ll%mod;
scanf("%s%s",s+1,t+1);
ll ans=calc();
cl(lcp0),cl(lcp1),cl(cnt);//
swap(s,t);
ans+=calc();
//cerr<<ans<<"%\n";
int n=strlen(s+1),m=strlen(t+1);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
ans-=lcp1[i][j];//,cerr<<lcp1[i][j]<<"$";
}
cout<<ans<<"\n";
return 0;
}
详细
Test #1:
score: 0
Memory Limit Exceeded
input:
abab ab
output:
8