QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#735270#7780. Dark LaTeX vs. Light LaTeXHNO3ilML 0ms0kbC++141.6kb2024-11-11 18:52:012024-11-11 18:52:02

Judging History

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

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2024-11-11 18:52:02]
  • 评测
  • 测评结果:ML
  • 用时:0ms
  • 内存:0kb
  • [2024-11-11 18:52:01]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define db double
#define endl '\n'
#define lowbit(x) x&-x
#define intz(x,a) memset(x,a,sizeof(x));
const int N=5e3+5;
int lcp[N][N],sum[N][N],lens,lent,dp[N][N],cnt[N][N],ct[N][N];char s[N],t[N];
signed main(){
//	freopen("tst.out","r",stdin);
	scanf("%s%s",s+1,t+1);lens=strlen(s+1),lent=strlen(t+1);
	for(int j=lent;j;j--)
		for(int i=lens;i;i--)dp[i][j]=(s[i]==t[j]?dp[i+1][j+1]+1:0),cnt[i][dp[i][j]]++;
	for(int j=1;j<=lens;j++){
		for(int i=lens-j+1;i;i--)cnt[j][i]+=cnt[j][i+1];
		for(int i=j;i<=lens;i++)ct[j][i]=cnt[j][i-j+1];
	}
	for(int j=lens;j;j--)
		for(int i=j;i;i--)lcp[i][j]=(s[i]==s[j]?lcp[i+1][j+1]+1:0);
	for(int i=lens;i;i--)
		for(int j=i;j;j--)sum[i][j]=sum[i][j+1]+ct[j][i];
	int ans=0;
	for(int i=1;i<=lens;i++)
		for(int j=i+1;j<=lens;j++){int len=lcp[i][j];ans+=sum[j-1][i+1]-sum[j-1][min(i+len,j-1)+1];}
	swap(lens,lent);swap(s,t);intz(lcp,0);intz(cnt,0);intz(dp,0);
	for(int j=lent;j;j--)
		for(int i=lens;i;i--)dp[i][j]=(s[i]==t[j]?dp[i+1][j+1]+1:0),cnt[i][dp[i][j]]++;
	for(int j=1;j<=lens;j++){
		for(int i=lens-j+1;i;i--)cnt[j][i]+=cnt[j][i+1];
		for(int i=j;i<=lens;i++)ct[j][i]=cnt[j][i-j+1];
	}
	for(int j=lens;j;j--)
		for(int i=j;i;i--)lcp[i][j]=(s[i]==s[j]?lcp[i+1][j+1]+1:0);
	for(int i=lens;i;i--)
		for(int j=i;j;j--)sum[i][j]=sum[i][j+1]+ct[j][i];
	for(int i=1;i<=lens;i++)
		for(int j=i+1;j<=lens;j++){int len=lcp[i][j];ans+=sum[j-1][i+1]-sum[j-1][min(i+len,j-1)+1];}
	for(int i=1;i<=lens;i++)
		for(int j=i+1;j<=lens+1;j++)ans+=ct[i][j-1];
	cout<<ans;
	return 0;
}

详细

Test #1:

score: 0
Memory Limit Exceeded

input:

abab
ab

output:

8

result: