QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#615325#7780. Dark LaTeX vs. Light LaTeX_Hugoi_#TL 517ms118416kbC++142.9kb2024-10-05 18:06:262024-10-05 18:06:26

Judging History

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

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2024-10-05 18:06:26]
  • 评测
  • 测评结果:TL
  • 用时:517ms
  • 内存:118416kb
  • [2024-10-05 18:06:26]
  • 提交

answer

#include"bits/stdc++.h"
using namespace std;
const int maxn = 5010;
const int maxN = 12500010;
int n,m;
char a[maxn],b[maxn];
int A[maxn][maxn];
void GetLcp(char* a,char* b,int Ta,int Tb){
	for(int i=Ta;i>=1;i--)
		for(int j=Tb;j>=1;j--){
			if(a[i]==b[j])A[i][j]=A[i+1][j+1]+1;
			else A[i][j]=0;
		}
}
void GetLcs(char* a,char* b,int Ta,int Tb){
	for(int i=1;i<=Ta;i++)
		for(int j=1;j<=Tb;j++){
			if(a[i]==b[j])A[i][j]=A[i-1][j-1]+1;
			else A[i][j]=0;
		}
}
#define L long long
#define XI __int128
const L mo = 1926081719491001071ll;
template<typename Key,typename T,unsigned n,unsigned p>struct UNORDERED_MAP{
// Key : key type (signed/unsigned int/long long)
// T : value type
// n : the maximum total number of times insert() and operator[] is called
// p : number of buckets
	unsigned hsh(unsigned long long x)const{
		static const unsigned long long t=
		std::chrono::steady_clock::now().time_since_epoch().count();
		x+=t+0x9e3779b97f4a7c15;
		x=(x^(x>>30))*0xbf58476d1ce4e5b9;
		x=(x^(x>>27))*0x94d049bb133111eb;
		return(x^(x>>31))%p;
	}
	struct Q{Key x;T y;unsigned z;}e[n+1];
	unsigned h[p],idx,sz;
	bool empty()const{return!sz;}
	unsigned size()const{return sz;}
	void clear(){
		for(unsigned i=1;i<=idx;++i) h[hsh(e[i].x)]=0,e[i]=e[i-1];
		idx=sz=0;
	}
	Q*find(const Key&x){
		auto z=hsh(x);
		for(auto i=h[z];i;i=e[i].z)
			if(e[i].x==x)
				return&e[i];
		return 0;
	}
	std::pair<Q*,bool>insert(const Key&x,const T&y){
		auto z=hsh(x);
		for(auto i=h[z];i;i=e[i].z)
			if(e[i].x==x)
				return std::make_pair(&e[i],0);
		++idx,++sz,e[idx].x=x,e[idx].y=y,e[idx].z=h[z],h[z]=idx;
		return std::make_pair(&e[idx],1);
	}
	bool erase(const Key&x){
		auto z=hsh(x);
		for(auto i=h[z],j=-1;i;j=i,i=e[i].z)
			if(e[i].x==x)
				return(~j?e[j].z:h[z])=e[i].z,--sz,1;
		return 0;
	}
	T&operator[](const Key&x){
		auto z=hsh(x);
		for(auto i=h[z];i;i=e[i].z)
			if(e[i].x==x)
				return e[i].y;
		++idx,++sz,e[idx].x=x,e[idx].z=h[z],h[z]=idx;
		return e[idx].y;
	}
};
UNORDERED_MAP<L,short,maxN,maxN>Mp;
void Insert(char* s){
	int Ln=strlen(s+1);
	XI Hs=0;
	for(int i=1;i<=Ln;i++){
		Hs=(Hs*2+s[i]-'a'+1)%mo;
		Mp[Hs]++;
	}
}
void Journey(char* s,int *o){
	int Ln=strlen(s+1);
	XI Hs=0;
	for(int i=1;i<=Ln;i++){
		Hs=(Hs*2+s[i]-'a'+1)%mo;
		o[i]=Mp[Hs];
	}
}
void Clear(){
	Mp.clear();
}
int s[maxn];
long long Ans=0;
void Solve(){
	GetLcs(a,a,n,n);
	for(int j=1;j<=m;j++)
		Insert(b+j-1);
	for(int l=2;l<=n;l++){
		Journey(a+l-1,s);
		for(int i=1;i<=n;i++)
			s[i]=s[i]+s[i-1];
		for(int r=l;r<=n;r++){
			if(!A[l-1][r])continue;
			if(min(r-l+1,A[l-1][r])==r-l+1)Ans+=s[r-l];
			else Ans+=s[r-l]-s[r-l-A[l-1][r]];
		}
	}
	Clear();
}
int main(){
	scanf("%s%s",a+1,b+1);
	n=strlen(a+1),m=strlen(b+1);
	GetLcp(a,b,n,m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			Ans+=A[i][j];
	Solve();
	swap(a,b),swap(n,m);
	Solve();
	cout<<Ans<<endl;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3640kb

input:

abab
ab

output:

8

result:

ok 1 number(s): "8"

Test #2:

score: 0
Accepted
time: 1ms
memory: 3716kb

input:

abab
abaaab

output:

29

result:

ok 1 number(s): "29"

Test #3:

score: 0
Accepted
time: 1ms
memory: 5864kb

input:

abcd
abcde

output:

10

result:

ok 1 number(s): "10"

Test #4:

score: 0
Accepted
time: 0ms
memory: 3668kb

input:

aaba
ba

output:

6

result:

ok 1 number(s): "6"

Test #5:

score: 0
Accepted
time: 2ms
memory: 7852kb

input:

babababaaabbaabababbbaabbbababbaaaaa
aaaabbaababbab

output:

1161

result:

ok 1 number(s): "1161"

Test #6:

score: 0
Accepted
time: 517ms
memory: 118416kb

input:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

78156256250000

result:

ok 1 number(s): "78156256250000"

Test #7:

score: 0
Accepted
time: 53ms
memory: 78844kb

input:

gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...

output:

60716448

result:

ok 1 number(s): "60716448"

Test #8:

score: 0
Accepted
time: 56ms
memory: 78848kb

input:

mlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllml...

output:

60679828

result:

ok 1 number(s): "60679828"

Test #9:

score: -100
Time Limit Exceeded

input:

vbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvb...

output:


result: