QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#630447 | #7780. Dark LaTeX vs. Light LaTeX | Akoasm_X | ML | 516ms | 203164kb | C++20 | 2.9kb | 2024-10-11 18:37:00 | 2024-10-11 18:37:03 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
typedef long long LL;
inline int read(){
int x = 0 , f = 1 ; char c = getchar() ;
while( c < '0' || c > '9' ) { if( c == '-' ) f = -1 ; c = getchar() ; }
while( c >= '0' && c <= '9' ) { x = x * 10 + c - '0' ; c = getchar() ; }
return x * f ;
}
const int maxn = 5020;
LL Ans;
int n,m,cnt;
int z[maxn][maxn],s[maxn][maxn];
char A[maxn],B[maxn];
int sz[maxn * maxn];
int son[maxn*maxn/2][26];
void Clear(){
for(int i=0;i<=n;i++)
for(int j=0;j<=n;j++)
z[i][j] = s[i][j] = 0;
for(int i=0;i<=cnt;i++){
for(int j=0;j<26;j++) son[i][j] = 0;
sz[i] = 0;
}
cnt = 0;
}
void build(){
for(int i=1;i<=m;i++){
int now = 0;
for(int j=0;i+j<=m;j++){
int t = B[i+j] - 'a';
if(!son[now][t]) son[now][t] = ++cnt;
now = son[now][t];
sz[now]++;
// cout<<son[now][B[i+j]]<<endl;
// now = t;
}
}
}
void getlcp(char s[],int id){
// int N = (int)s.length();
int N = strlen(s);
// vector<int> z(n);
for (int i = 1, l = 0, r = 0; i < N; ++i) {
if (i <= r && z[id][i - l + id] < r - i + 1) {
z[id][i + id] = z[id][i - l + id];
}
else {
z[id][i + id] = max(0, r - i + 1);
while (i + z[id][i + id] < n && s[z[id][i + id]] == s[i + z[id][i + id]]) ++z[id][i + id];
}
if (i + z[id][i + id] - 1 > r) l = i, r = i + z[id][i + id] - 1;
// cout<<id<<" "<<i + id<<" "<<z[id][i + id]<<endl;
}
}
void bf(){
for(int i=1;i<=n;i++){
for(int j=i+2;j<=n;j++){
int t = z[i][j];
t = min(t,j - 1 - i);
s[i+1][j-1]++;
s[i+t+1][j-1]--;
}
}
for(int j=1;j<=n;j++){
for(int i=1;i<=n;i++){
s[i][j] += s[i-1][j];
}
}
for(int i=1;i<=n;i++){
int now = 0;
for(int j=i;j<=n;j++){
int t = A[j] - 'a';
// int t = son[now][A[j]];
if(!son[now][t]) break;
now = son[now][t];
Ans += s[i][j] * sz[now];
}
}
}
void BF(){
for(int i=1;i<=n;i++){
int now = 0;
for(int j=i;j<=n;j++){
int t = A[j] - 'a';
if(!son[now][t]) break;
now = son[now][t];
Ans += sz[now];
}
}
}
void solve(){
scanf("%s",A+1);n = strlen(A+1);
scanf("%s",B+1);m = strlen(B+1);
build();
// get_lcp();
for(int i=1;i<=n;i++) getlcp(A+i,i);
bf();
Clear();
swap(A,B);
swap(n,m);
build();
for(int i=1;i<=n;i++) getlcp(A+i,i);
bf();
BF();
printf("%lld\n",Ans);
}
int main(){
// freopen("1.txt","r",stdin);
int T = 1;
// T = read();
while(T--) solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2ms
memory: 10040kb
input:
abab ab
output:
8
result:
ok 1 number(s): "8"
Test #2:
score: 0
Accepted
time: 0ms
memory: 10052kb
input:
abab abaaab
output:
29
result:
ok 1 number(s): "29"
Test #3:
score: 0
Accepted
time: 2ms
memory: 9968kb
input:
abcd abcde
output:
10
result:
ok 1 number(s): "10"
Test #4:
score: 0
Accepted
time: 0ms
memory: 9956kb
input:
aaba ba
output:
6
result:
ok 1 number(s): "6"
Test #5:
score: 0
Accepted
time: 0ms
memory: 10088kb
input:
babababaaabbaabababbbaabbbababbaaaaa aaaabbaababbab
output:
1161
result:
ok 1 number(s): "1161"
Test #6:
score: 0
Accepted
time: 516ms
memory: 203164kb
input:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
78156256250000
result:
ok 1 number(s): "78156256250000"
Test #7:
score: 0
Accepted
time: 33ms
memory: 71184kb
input:
gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...
output:
60716448
result:
ok 1 number(s): "60716448"
Test #8:
score: 0
Accepted
time: 43ms
memory: 77328kb
input:
mlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllml...
output:
60679828
result:
ok 1 number(s): "60679828"
Test #9:
score: -100
Memory Limit Exceeded
input:
vbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvb...
output:
2655796915