QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#768835#7780. Dark LaTeX vs. Light LaTeXucup-team5217#ML 0ms3812kbC++232.1kb2024-11-21 14:44:592024-11-21 14:45:00

Judging History

This is the latest submission verdict.

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2024-11-21 14:45:00]
  • Judged
  • Verdict: ML
  • Time: 0ms
  • Memory: 3812kb
  • [2024-11-21 14:44:59]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
#define int long long
using ll = long long;
void solve(void) {
    string a,b;cin>>a>>b;
    ll ans=0;
    auto ope=[&](int t)->void {
        int sa=a.size();
        int sb=b.size();
        vector<vector<int>> fa(sa+1,vector<int>(sa+1));
        for(int i=sa-1;i>=0;i--){
            for(int j=sa-1;j>=0;j--){
                if(a[i]==a[j])  fa[i][j]=1+fa[i+1][j+1];
                else fa[i][j]=0;
            }
        }
        vector<vector<int>> fb(sb+1,vector<int>(sb+1));
        for(int i=sb-1;i>=0;i--){
            for(int j=sb-1;j>=0;j--){
                if(b[i]==b[j])  fb[i][j]=1+fb[i+1][j+1];
                else fb[i][j]=0;
            }
        }
        string ra=a,rb=b;reverse(ra.begin(),ra.end());reverse(rb.begin(),rb.end());
        vector<vector<int>> fab(sa+1,vector<int>(sb+1));
        for(int i=sa-1;i>=0;i--){
            for(int j=sb-1;j>=0;j--){
                if(ra[i]==rb[j])  fab[i][j]=1+fab[i+1][j+1];
                else fab[i][j]=0;
            }
        }
        vector<vector<int>> sum(sa,vector<int>(sa+2,0));

        for(int i=0;i<sa;i++){
            for(int j=0;j<sb;j++){
                sum[i][0]++;
                sum[i][fab[i][j]+1]--;
                // if(i==sa-1) cerr<<fab[i][j]<<' '<<j<<'\n';
            }
            for(int j=1;j<=sa+1;j++){
                sum[i][j]+=sum[i][j-1];
            }
            for(int j=1;j<=sa+1;j++){
                sum[i][j]+=sum[i][j-1];
            }
        }
        // cerr<<sum[sa-1][1]-sum[sa-1][0]<<'\n'
        for(int i=0;i<sa;i++){
            for(int j=i+1;j<=sa;j++){
                int len=min(fa[i][j],j-i);
                int lw=max(1ll,j-i-len),up=j-i;
                if(t)   up--;
                ans=(ans+sum[sa-j][up]-sum[sa-j][lw-1]);
                // cerr<<i<<' '<<j<<' '<<lw<<' '<<up<<' '<<ans<<'\n';
            }
            
        }
    };
    ope(0);
    swap(a,b);
    // cerr<<'\n';
    ope(1);
    cout<<ans<<'\n';
}

signed main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);

    int _ = 1;
    while (_--) solve();

    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3780kb

input:

abab
ab

output:

8

result:

ok 1 number(s): "8"

Test #2:

score: 0
Accepted
time: 0ms
memory: 3592kb

input:

abab
abaaab

output:

29

result:

ok 1 number(s): "29"

Test #3:

score: 0
Accepted
time: 0ms
memory: 3776kb

input:

abcd
abcde

output:

10

result:

ok 1 number(s): "10"

Test #4:

score: 0
Accepted
time: 0ms
memory: 3812kb

input:

aaba
ba

output:

6

result:

ok 1 number(s): "6"

Test #5:

score: 0
Accepted
time: 0ms
memory: 3560kb

input:

babababaaabbaabababbbaabbbababbaaaaa
aaaabbaababbab

output:

1161

result:

ok 1 number(s): "1161"

Test #6:

score: -100
Memory Limit Exceeded

input:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

78156256250000

result: