QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#279935#7780. Dark LaTeX vs. Light LaTeXucup-team2279#TL 1ms8080kbC++141.6kb2023-12-09 12:31:052023-12-09 12:31:06

Judging History

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

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2023-12-09 12:31:06]
  • 评测
  • 测评结果:TL
  • 用时:1ms
  • 内存:8080kb
  • [2023-12-09 12:31:05]
  • 提交

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...

output:


result: