QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#726409#7780. Dark LaTeX vs. Light LaTeXqikala7777TL 500ms334136kbC++232.2kb2024-11-08 23:59:192024-11-08 23:59:20

Judging History

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

  • [2024-11-25 20:53:52]
  • hack成功,自动添加数据
  • (/hack/1258)
  • [2024-11-08 23:59:20]
  • 评测
  • 测评结果:TL
  • 用时:500ms
  • 内存:334136kb
  • [2024-11-08 23:59:19]
  • 提交

answer

#include<bits/stdc++.h>
#include<bits/extc++.h> 
#define ext __gnu_pbds
using namespace ext;
#define ll long long
#define pb push_back
#define ull unsigned long long
using namespace std;
typedef pair<int,int> pii;
const int N=5005;
ull pw[N+10];
const ull base=11451;
int lcp[N][N],szs,szt;
ll sum[N][N];
string s,t;
void init_strhash(int lim=0){
    pw[0]=1;
    for(int i=1;i<=lim;i++){
        pw[i]=pw[i-1]*base;
    }
}
struct Str_hash{
    ull v[N+10];
    void init(const string& s){
        int m=s.size();
        for(int j=1;j<=m;j++){
            char ch=s[j];
            v[j]=v[j-1]*base+ch;
        }
    }
    ull get(int L,int R){
        return v[R]-(v[L-1]*pw[R-L+1]);
    }
}hs,ht;
gp_hash_table<ull,int> mp;
ll ans,pds;
void solve(){
    pds=0;
    mp.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);
    //cout<<ht.get(5,6)<<endl;
    //cout<<hs.get(3,4)<<endl;
    for(int len=1;len<=szt;len++){
        for(int l=1;l+len-1<=szt;l++){
            int r=l+len-1;
            mp[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[hs.get(i,j)];
            
            //cout<<"i:"<<i<<" j:"<<j<<" sum:"<<sum[i][j]<<endl;
        }
    }//从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;
        }
    }
}
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
*/

详细

Test #1:

score: 100
Accepted
time: 31ms
memory: 297448kb

input:

abab
ab

output:

8

result:

ok 1 number(s): "8"

Test #2:

score: 0
Accepted
time: 43ms
memory: 297160kb

input:

abab
abaaab

output:

29

result:

ok 1 number(s): "29"

Test #3:

score: 0
Accepted
time: 31ms
memory: 297156kb

input:

abcd
abcde

output:

10

result:

ok 1 number(s): "10"

Test #4:

score: 0
Accepted
time: 39ms
memory: 297380kb

input:

aaba
ba

output:

6

result:

ok 1 number(s): "6"

Test #5:

score: 0
Accepted
time: 44ms
memory: 297316kb

input:

babababaaabbaabababbbaabbbababbaaaaa
aaaabbaababbab

output:

1161

result:

ok 1 number(s): "1161"

Test #6:

score: 0
Accepted
time: 500ms
memory: 297824kb

input:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

78156256250000

result:

ok 1 number(s): "78156256250000"

Test #7:

score: 0
Accepted
time: 128ms
memory: 334108kb

input:

gzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggzggzgzggzggzgzggzgzggz...

output:

60716448

result:

ok 1 number(s): "60716448"

Test #8:

score: 0
Accepted
time: 139ms
memory: 334136kb

input:

mlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllmllmlmllmllmlmllmlmllmllmlmllmlmllml...

output:

60679828

result:

ok 1 number(s): "60679828"

Test #9:

score: -100
Time Limit Exceeded

input:

vbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvbbvbvbbvbbvbvbbvbvbbvb...

output:

2655796915

result: