QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#352356#7780. Dark LaTeX vs. Light LaTeXOccDreamer#TL 927ms297360kbC++143.2kb2024-03-13 10:21:142024-03-13 10:21:15

Judging History

你现在查看的是最新测评结果

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2024-03-13 10:21:15]
  • 评测
  • 测评结果:TL
  • 用时:927ms
  • 内存:297360kb
  • [2024-03-13 10:21:14]
  • 提交

answer

//code by Emissary
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>

#define fi first
#define se second
#define vc vector
#define db double
#define ll long long
#define mk make_pair
#define pb push_back
#define PI pair<int,int>
#define ull unsigned long long
#define err cerr << "   -_-   " << endl
#define debug cerr << " ------------------- " << endl

#define input(x) freopen(#x".in","r",stdin)
#define output(x) freopen(#x".out","w",stdout)

#define NO puts("No")
#define YES puts("Yes")

//#define int long long

using namespace std;

namespace IO{
	inline int read(){
		int X=0, W=0; char ch=getchar();
		while(!isdigit(ch)) W|=ch=='-', ch=getchar();
		while(isdigit(ch)) X=(X<<1)+(X<<3)+(ch^48), ch=getchar();
		return W?-X:X;
	}
	inline void write(int x){
		if(x<0) x=-x, putchar('-');
		if(x>9) write(x/10);
		putchar(x%10+'0');
	}
	inline void sprint(int x){write(x), putchar(32);}
	inline void eprint(int x){write(x), putchar(10);}
}using namespace IO;

const int MAXN = 5005;
const int base = 13331;
const int mod = 998244353;

int lcp[MAXN][MAXN], add[MAXN];
int n, m, pres[MAXN], pret[MAXN];
int S[MAXN][MAXN], T[MAXN][MAXN], powc[MAXN];

ll ans;

char s[MAXN], t[MAXN];

int ss[MAXN], tt[MAXN], sss, ttt;

inline int hs(int l, int r){return (pres[r]-1ll*pres[l-1]*powc[r-l+1]%mod+mod)%mod;}

inline int ht(int l, int r){return (pret[r]-1ll*pret[l-1]*powc[r-l+1]%mod+mod)%mod;}

inline ll solve1(){
	powc[0]=1; ll sum=0;
	for(int i=1;i<=5000;++i) powc[i]=1ll*powc[i-1]*13331%mod;
	for(int i=1;i<=n;++i) pres[i]=(1ll*base*pres[i-1]+s[i]-'a'+1)%mod;
	for(int i=1;i<=m;++i) pret[i]=(1ll*base*pret[i-1]+t[i]-'a'+1)%mod;
	for(int len=1;len<=n;++len){
		sss=0, ttt=0;
		for(int i=1;i+len-1<=n;++i) ss[++sss]=hs(i,i+len-1);
		for(int i=1;i+len-1<=m;++i) tt[++ttt]=ht(i,i+len-1);
		sort(ss+1,ss+1+sss); sort(tt+1,tt+1+ttt);
		for(int i=1;i+len-1<=n;++i){
			int v=hs(i,i+len-1);
			S[i][i+len-1]=upper_bound(tt+1,tt+1+ttt,v)-lower_bound(tt+1,tt+1+ttt,v);
			sum+=S[i][len+i-1];
		}
		for(int i=1;i+len-1<=m;++i){
			int v=ht(i,i+len-1);
			T[i][i+len-1]=upper_bound(ss+1,ss+1+sss,v)-lower_bound(ss+1,ss+1+sss,v);
		}
	}
	return sum;
}

inline ll solve2(){
	ll sum=0;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			lcp[i][j]=(s[i]==s[j]?j:0);
	for(int i=n;i>=2;--i)
		for(int j=n;j>=2;--j)
			if(s[i-1]==s[j-1]) lcp[i-1][j-1]=max(lcp[i-1][j-1],lcp[i][j]);
	for(int r=n-1;r>=1;--r){
		memset(add,0,sizeof add); int now=0;
		for(int i=1;i<r;++i) add[lcp[r+1][i]]++;
		for(int i=n;i>=r;--i) now+=add[i];
		for(int l=r;l>=2;--l){
			now+=add[l-1];
			if(s[l]==s[r+1] && l!=r) now--;
			sum+=1ll*S[l][r]*now; 
			//cerr << "range:" << l << ' ' << r << ' ' << S[l][r] << ' ' << now << endl;
		}
	}
	return sum;
}

signed main(){
	scanf("%s%s",s+1,t+1);
	n=strlen(s+1), m=strlen(t+1);
	ans+=solve1();
	//cerr << "ans=" << ans << endl;
	ans+=solve2();
//	cerr << "ans=" << ans << endl;
	//return 0;
	swap(n,m); swap(s,t); swap(S,T);
	ans+=solve2();
	cout << ans << endl;
	return 0;
}





































































Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 4ms
memory: 200204kb

input:

abab
ab

output:

8

result:

ok 1 number(s): "8"

Test #2:

score: 0
Accepted
time: 27ms
memory: 201040kb

input:

abab
abaaab

output:

29

result:

ok 1 number(s): "29"

Test #3:

score: 0
Accepted
time: 12ms
memory: 200112kb

input:

abcd
abcde

output:

10

result:

ok 1 number(s): "10"

Test #4:

score: 0
Accepted
time: 16ms
memory: 201596kb

input:

aaba
ba

output:

6

result:

ok 1 number(s): "6"

Test #5:

score: 0
Accepted
time: 23ms
memory: 201820kb

input:

babababaaabbaabababbbaabbbababbaaaaa
aaaabbaababbab

output:

1161

result:

ok 1 number(s): "1161"

Test #6:

score: 0
Accepted
time: 927ms
memory: 297360kb

input:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

78156256250000

result:

ok 1 number(s): "78156256250000"

Test #7:

score: 0
Accepted
time: 123ms
memory: 220724kb

input:

gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...

output:

60716448

result:

ok 1 number(s): "60716448"

Test #8:

score: 0
Accepted
time: 120ms
memory: 219240kb

input:

mlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllml...

output:

60679828

result:

ok 1 number(s): "60679828"

Test #9:

score: -100
Time Limit Exceeded

input:

vbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvb...

output:


result: