QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#630447#7780. Dark LaTeX vs. Light LaTeXAkoasm_XML 516ms203164kbC++202.9kb2024-10-11 18:37:002024-10-11 18:37:03

Judging History

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

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2024-10-11 18:37:03]
  • 评测
  • 测评结果:ML
  • 用时:516ms
  • 内存:203164kb
  • [2024-10-11 18:37:00]
  • 提交

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

result: