WA on #2 求助
查看原帖
WA on #2 求助
399150
ShunpowerSHUN理成张楼主2022/12/21 22:25
//Author:Zealous_YH / Cream_H
//Su Chanzi & Xiao Bao
//Hey Left
//Just enjoy the loneliness
//Open a personal party always stay
#include <bits/stdc++.h>
#define ET return 0
#define fi first
#define se second
#define mp make_pair
#define pb emplace_back
#define ll long long
#define ull unsigned long long
#define inf INT_MAX
#define uinf INT_MIN
#define pii pair<int,int>
#define pll pair<ll,ll>
#define debug puts("--------Chery AK IOI--------");
#define Yes cout<<"Yes"<<endl;
#define No cout<<"No"<<endl;
#define pt puts("")
#define fr1(i,a,b) for(int i=a;i<=b;i++)
#define fr2(i,a,b) for(int i=a;i>=b;i--)
#define fv(i,p) for(int i=0;i<p.size();i++)
#define ld long double
#define il inline
#define ptc putchar
using namespace std;
const int N=1e4+10;
namespace Cream_H{
    int lowbit(int x){
        return x&-x;
    }
    template <typename T>
    inline void read(T &x){
       T s=0,w=1;
       char ch=getchar();
       while(ch<'0'||ch>'9'){
            if(ch=='-'){
                w=-1;
            }
            ch=getchar();
        }
       while(ch>='0'&&ch<='9'){
            s=s*10+ch-'0';
            ch=getchar();
       }
       x=s*w;
    }
    template <typename T>
    inline void write(T x){
        if(x<0){
            putchar('-');
            x=-x;
        }
        if(x>9){
            write(x/10);
        }
        putchar(x%10+'0');
    }
}
using namespace Cream_H;
int n;
string s,t;
int rk[N<<1],oldrk[N<<1];
int wh[N];
int sa[N];
bool bol[6];
int height[N];
int w,len;
bool cmp(int x,int y){
    if(rk[x]==rk[y]){
        return rk[x+w]<rk[y+w];
    }
    return rk[x]<rk[y];
}
void Height(){
    int k=0;
    fr1(i,1,len){
        if(rk[i]==1){
            continue;
        }
        if(k){
            k--;
        }
        while(i+k<=len&&sa[rk[i]-1]+k<=len&&s[i+k]==s[sa[rk[i]-1]+k]){
            k++;
        }
        // cout<<i<<","<<rk[i]<<":"<<k<<endl;
        height[rk[i]]=k;
    }
}
bool check(int x){
    fr1(i,1,n){
        bol[i]=0;
    }
    fr1(i,1,len+1){
        if(height[i]>=x){
            bol[wh[sa[i]]]=1;
        }
        else{
            bool f=1;
            fr1(j,1,n){
                if(!bol[j]){
                    f=0;
                    break;
                }
            }
            fr1(j,1,n){
                bol[j]=0;
            }
            // cout<<x<<":"<<i<<endl;
            // fr1(j,1,n){
            //     cout<<bol[j]<<" ";
            // }
            // cout<<endl;
            if(f){
                return 1;
            }
            bol[wh[sa[i]]]=1;
        }
    }
    return 0;
}
int main(){
    cin>>n;
    s='@';
    fr1(i,1,n){
        cin>>t;
        wh[s.length()]++;
        s+=t;
    }
    len=s.length()-1;
    fr1(i,1,len){
        wh[i]+=wh[i-1];
    }
    fr1(i,1,len){
        rk[i]=s[i];
        sa[i]=i;
    }
    for(w=1;w<len;w*=2){
        sort(sa+1,sa+len+1,cmp);
        fr1(i,1,len){
            oldrk[i]=rk[i];
        }
        int tot=0;
        fr1(i,1,len){
            if(oldrk[sa[i]]==oldrk[sa[i-1]]&&oldrk[sa[i]+w]==oldrk[sa[i-1]+w]){
                rk[sa[i]]=rk[sa[i-1]];
            }
            else{
                tot++;
                rk[sa[i]]=tot;
            }
        }
    }
    Height();
    // cout<<s<<endl;
    // fr1(i,1,len){
    //     cout<<sa[i]<<" ";
    // }
    // cout<<endl;
    // fr1(i,1,len){
    //     cout<<rk[i]<<" ";
    // }
    // cout<<endl;
    // fr1(i,1,len){
    //     cout<<height[i]<<" ";
    // }
    // cout<<endl;
    int l=1,r=len;
    int ans=0;
    while(l<=r){
        int mid=(l+r)>>1;
        if(check(mid)){
            l=mid+1;
            ans=mid;
        }
        else{
            r=mid-1;
        }
    }
    cout<<ans<<endl;
    ET;
}
//Teens-in-Times
//HJL 2004.06.15
//YHX 2004.08.16
//Everything For Ji, Lin, Hao, Shun, Hang and You.

未知原因,LOJ 成功 AC,洛谷 WA #2。

https://www.luogu.com.cn/record/97747100

2022/12/21 22:25
加载中...