QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#352359#7780. Dark LaTeX vs. Light LaTeXOccDreamer#WA 500ms315756kbC++143.3kb2024-03-13 10:26:362024-03-13 10:26:37

Judging History

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

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2024-03-13 10:26:37]
  • 评测
  • 测评结果:WA
  • 用时:500ms
  • 内存:315756kb
  • [2024-03-13 10:26:36]
  • 提交

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 = 19260817;

int lcp[MAXN][MAXN], add[MAXN];
int n, m, pres[MAXN], pret[MAXN];
int S[MAXN][MAXN], T[MAXN][MAXN], powc[MAXN], total[mod+2];

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) total[hs(i,i+len-1)]++;
		for(int i=1;i+len-1<=m;++i){
			int v=ht(i,i+len-1);
			T[i][i+len-1]=total[v];
		}
		for(int i=1;i+len-1<=n;++i) total[hs(i,i+len-1)]--;
		for(int i=1;i+len-1<=m;++i) total[ht(i,i+len-1)]++;
		for(int i=1;i+len-1<=n;++i){
			int v=hs(i,i+len-1);
			S[i][i+len-1]=total[v];
			sum+=S[i][len+i-1];
		}
		for(int i=1;i+len-1<=m;++i) total[ht(i,i+len-1)]--;
	}
	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);
	//n=m=5000;
	//for(int i=1;i<=n;++i) s[i]='a'+rand()%26;
	//for(int i=1;i<=n;++i) t[i]='a'+rand()%26;
	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: 20ms
memory: 208648kb

input:

abab
ab

output:

8

result:

ok 1 number(s): "8"

Test #2:

score: 0
Accepted
time: 19ms
memory: 210516kb

input:

abab
abaaab

output:

29

result:

ok 1 number(s): "29"

Test #3:

score: 0
Accepted
time: 8ms
memory: 208512kb

input:

abcd
abcde

output:

10

result:

ok 1 number(s): "10"

Test #4:

score: 0
Accepted
time: 11ms
memory: 204496kb

input:

aaba
ba

output:

6

result:

ok 1 number(s): "6"

Test #5:

score: 0
Accepted
time: 36ms
memory: 270156kb

input:

babababaaabbaabababbbaabbbababbaaaaa
aaaabbaababbab

output:

1161

result:

ok 1 number(s): "1161"

Test #6:

score: 0
Accepted
time: 500ms
memory: 315756kb

input:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

78156256250000

result:

ok 1 number(s): "78156256250000"

Test #7:

score: -100
Wrong Answer
time: 43ms
memory: 283068kb

input:

gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...

output:

60716471

result:

wrong answer 1st numbers differ - expected: '60716448', found: '60716471'