QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#615329 | #7780. Dark LaTeX vs. Light LaTeX | _Hugoi_# | TL | 519ms | 118976kb | C++14 | 3.0kb | 2024-10-05 18:06:56 | 2024-10-05 18:06:56 |
Judging History
answer
#include"bits/stdc++.h"
using namespace std;
#pragma GCC optimize("Ofast,no-stack-protector,fast-math",2,3)
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2")
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;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3936kb
input:
abab ab
output:
8
result:
ok 1 number(s): "8"
Test #2:
score: 0
Accepted
time: 1ms
memory: 4056kb
input:
abab abaaab
output:
29
result:
ok 1 number(s): "29"
Test #3:
score: 0
Accepted
time: 0ms
memory: 5868kb
input:
abcd abcde
output:
10
result:
ok 1 number(s): "10"
Test #4:
score: 0
Accepted
time: 0ms
memory: 3972kb
input:
aaba ba
output:
6
result:
ok 1 number(s): "6"
Test #5:
score: 0
Accepted
time: 2ms
memory: 7908kb
input:
babababaaabbaabababbbaabbbababbaaaaa aaaabbaababbab
output:
1161
result:
ok 1 number(s): "1161"
Test #6:
score: 0
Accepted
time: 519ms
memory: 118976kb
input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
78156256250000
result:
ok 1 number(s): "78156256250000"
Test #7:
score: 0
Accepted
time: 50ms
memory: 77708kb
input:
gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...
output:
60716448
result:
ok 1 number(s): "60716448"
Test #8:
score: 0
Accepted
time: 51ms
memory: 79820kb
input:
mlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllml...
output:
60679828
result:
ok 1 number(s): "60679828"
Test #9:
score: -100
Time Limit Exceeded
input:
vbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvb...