QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#302190 | #7780. Dark LaTeX vs. Light LaTeX | zzuqy# | TL | 770ms | 200188kb | C++14 | 2.5kb | 2024-01-10 17:18:36 | 2024-01-10 17:18:36 |
Judging History
answer
#include <iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<deque>
#include<unordered_map>
#include<map>
#define P 31525197391593473ll
#define ll long long
#define l(p) t[p].l
#define sum(p) t[p].sum
#define cnt(p) t[p].cnt
#define r(p) t[p].r
#define mod 998244353
#define sc(A) scanf("%d",&A)
#define rep(A,B,C) for(int C=A;C<=B;++C)
#define fep(A,B,C) for(int C=A;C>=B;--C)
#define put(x) printf("%d\n",x)
#define db double
using namespace std;
const int MAXN=5010;
int n,m,q,x,maxx=62,top;
char a[MAXN],b[MAXN];
int nex[MAXN];
int w[MAXN];
int c1[MAXN][MAXN];
int c2[MAXN][MAXN];
unordered_map<ll,int>H;
unordered_map<ll,int>H1;
//unordered_map<unsigned ll,int>H;
//unordered_map<unsigned ll,int>H1;
//map<pair<unsigned ll,int>,int>H;
//map<pair<unsigned ll,int>,int>H1;
signed main()
{
//freopen("1.in","r",stdin);
scanf("%s",a+1);
scanf("%s",b+1);
int n=strlen(a+1);
int m=strlen(b+1);
rep(1,n,i)
{
int base1=29;
int base2=114514;
unsigned ll s2=0;
ll s1=0;
rep(i,n,j)
{
s1=((ll)s1*base1+a[j])%P;
//s2=s2*base2+a[j];
++H[s1];
//++H[make_pair(s2,s1)];
}
}
ll ans=0;
rep(1,m,i)
{
int base1=29;
int base2=114514;
unsigned ll s2=0;
ll s1=0;
rep(i,m,j)
{
s1=((ll)s1*base1+b[j])%P;
//s2=s2*base2+b[j];
ans+=H[s1];
c2[i][j]=H[s1];
++H1[s1];
//ans+=H[make_pair(s2,s1)];
//c2[i][j]=H[make_pair(s2,s1)];
//++H1[make_pair(s2,s1)];
}
}
rep(1,n,i)
{
int base1=29;
int base2=114514;
unsigned ll s2=0;
ll s1=0;
rep(i,n,j)
{
s1=((ll)s1*base1+a[j])%P;
//s2=s2*base2+a[j];
//c1[i][j]=H1[make_pair(s2,s1)];
c1[i][j]=H1[s1];
}
}
rep(2,n,j)
{
int now=j;
w[j+1]=1;
w[j]=0;
nex[j+1]=j;
rep(j+2,min(2*j,n),i)
{
while(now!=j&&a[i]!=a[now+1])now=nex[now];
if(a[i]==a[now+1])++now;
nex[i]=now;
w[i]=w[now]+1;
}
now=j;
rep(1,j-1,i)
{
while(now!=j&&a[i]!=a[now+1])now=nex[now];
if(a[i]==a[now+1])++now;
ans+=(ll)w[now]*c1[i+1][j];
}
}
rep(2,m,j)
{
int now=j;
w[j+1]=1;
w[j]=0;
nex[j+1]=j;
rep(j+2,min(2*j,m),i)
{
while(now!=j&&b[i]!=b[now+1])now=nex[now];
if(b[i]==b[now+1])++now;
nex[i]=now;
w[i]=w[now]+1;
}
now=j;
rep(1,j-1,i)
{
while(now!=j&&b[i]!=b[now+1])now=nex[now];
if(b[i]==b[now+1])++now;
ans+=(ll)w[now]*c2[i+1][j];
}
}
printf("%lld\n",ans);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 5852kb
input:
abab ab
output:
8
result:
ok 1 number(s): "8"
Test #2:
score: 0
Accepted
time: 1ms
memory: 5876kb
input:
abab abaaab
output:
29
result:
ok 1 number(s): "29"
Test #3:
score: 0
Accepted
time: 1ms
memory: 7972kb
input:
abcd abcde
output:
10
result:
ok 1 number(s): "10"
Test #4:
score: 0
Accepted
time: 0ms
memory: 5816kb
input:
aaba ba
output:
6
result:
ok 1 number(s): "6"
Test #5:
score: 0
Accepted
time: 0ms
memory: 10280kb
input:
babababaaabbaabababbbaabbbababbaaaaa aaaabbaababbab
output:
1161
result:
ok 1 number(s): "1161"
Test #6:
score: 0
Accepted
time: 770ms
memory: 200188kb
input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
78156256250000
result:
ok 1 number(s): "78156256250000"
Test #7:
score: 0
Accepted
time: 121ms
memory: 69008kb
input:
gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...
output:
60716448
result:
ok 1 number(s): "60716448"
Test #8:
score: 0
Accepted
time: 131ms
memory: 71324kb
input:
mlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllml...
output:
60679828
result:
ok 1 number(s): "60679828"
Test #9:
score: -100
Time Limit Exceeded
input:
vbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvb...