QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#352359 | #7780. Dark LaTeX vs. Light LaTeX | OccDreamer# | WA | 500ms | 315756kb | C++14 | 3.3kb | 2024-03-13 10:26:36 | 2024-03-13 10:26:37 |
Judging History
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'