QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#704569#7780. Dark LaTeX vs. Light LaTeXqikala7777TL 803ms213776kbC++232.2kb2024-11-02 20:14:552024-11-02 20:15:00

Judging History

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

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2024-11-02 20:15:00]
  • 评测
  • 测评结果:TL
  • 用时:803ms
  • 内存:213776kb
  • [2024-11-02 20:14:55]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
using namespace std;
typedef pair<int,int> pii;
const int mod=1e14+7;
const int N=5005;
vector<ll>pw;
ll base;
mt19937 rnd(time(0));
int lcp[N][N],szs,szt;
int sum[N][N];
string s,t;
void init_strhash(int lim=0){
    pw=vector<ll>(lim+1);
    base=rnd()%mod;
    pw[0]=1;
    for(int i=1;i<=lim;i++){
        pw[i]=pw[i-1]*base%mod;
    }
}
struct Str_hash{
    vector<ll>v;
    Str_hash(){};
    void init(const string& s){
        int m=s.size();
        v.resize(m+2);
        for(int j=1;j<=m;j++){
            char ch=s[j];
            v[j]=(v[j-1]*base%mod+ch)%mod;
        }
    }
    ll get(int L,int R){
        return (v[R]-(v[L-1]*pw[R-L+1]%mod)+mod)%mod;
    }
}hs,ht;
unordered_map<ll,unordered_map<ll,int>>mp;
ll ans,pds;
void solve(){
    pds=0;
    for(int i=0;i<=5005;i++)mp[i].clear();
    memset(lcp,0,sizeof lcp);
    memset(sum,0,sizeof sum);
    for(int i=szs;i>=1;--i)
    for(int j=i;j<=szs;++j)
    if(s[i]==s[j])lcp[i][j]=lcp[i+1][j+1]+1;

    ht.init(t);
    hs.init(s);
    for(int len=1;len<=szt;len++){
        for(int l=1;l+len-1<=szt;l++){
            int r=l+len-1;
            mp[len][ht.get(l,r)]++;
        }
    }
    for(int j=szs;j>=1;j--){
        for(int i=j;i>=1;i--){
            sum[i][j]=sum[i+1][j]+mp[j-i+1][hs.get(i,j)];
        }
    }//从j开始到i后缀和
    for(int i=1;i<=szs;i++){
        for(int j=i+1;j<=szs+1;j++){
            int len=lcp[i][j];
            len=min(j-i-1,len);
            pds+=sum[i][j-1]-sum[i+1][j-1];
            ans+=sum[i][j-1]-sum[i+len+1][j-1];
            //cout<<"i:"<<i<<" j:"<<j<<" lcp:"<<lcp[i][j]<<endl;
            //cout<<"s1:"<<sum[i][j-1]-sum[i+1][j-1]<<endl;
            //cout<<"s2:"<<sum[i][j-1]-sum[i+len+1][j-1]<<endl;
        }
    }
    //cout<<"ans:"<<ans<<"pds:"<<pds<<endl;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>s>>t;
    init_strhash(N);
    szs=s.length(),szt=t.length();
    s='0'+s;
    t='0'+t;
    solve();
    swap(s,t);
    swap(szs,szt);
    solve();
    //cout<<"ans:"<<ans<<"pds:"<<pds<<endl;
    cout<<ans-pds<<endl;
    return 0;
}
/*
i
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 23ms
memory: 199848kb

input:

abab
ab

output:

8

result:

ok 1 number(s): "8"

Test #2:

score: 0
Accepted
time: 24ms
memory: 199804kb

input:

abab
abaaab

output:

29

result:

ok 1 number(s): "29"

Test #3:

score: 0
Accepted
time: 26ms
memory: 200000kb

input:

abcd
abcde

output:

10

result:

ok 1 number(s): "10"

Test #4:

score: 0
Accepted
time: 20ms
memory: 199796kb

input:

aaba
ba

output:

6

result:

ok 1 number(s): "6"

Test #5:

score: 0
Accepted
time: 19ms
memory: 199940kb

input:

babababaaabbaabababbbaabbbababbaaaaa
aaaabbaababbab

output:

1161

result:

ok 1 number(s): "1161"

Test #6:

score: 0
Accepted
time: 803ms
memory: 200792kb

input:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

78156256250000

result:

ok 1 number(s): "78156256250000"

Test #7:

score: 0
Accepted
time: 119ms
memory: 213776kb

input:

gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...

output:

60716448

result:

ok 1 number(s): "60716448"

Test #8:

score: 0
Accepted
time: 123ms
memory: 213720kb

input:

mlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllml...

output:

60679828

result:

ok 1 number(s): "60679828"

Test #9:

score: -100
Time Limit Exceeded

input:

vbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvb...

output:


result: