• hdu 4080 Stammering Aliens 二分 hash


    POJ 3882 TLE 需后缀数组

    ------------

    const int SEED = 13331;
    const int MAX_N = 50000 + 10;
    char s[MAX_N];
    struct HASH{
        ULL H[MAX_N];
        ULL XL[MAX_N];
        int len;
        HASH(){}
        void build(char *s){
            len=strlen(s);
            H[len]=0;
            XL[0]=1;
            for (int i=len-1;i>=0;i--){
                H[i]=H[i+1]*SEED+s[i];
                XL[len-i]=XL[len-i-1]*SEED;
            }
        }
        ULL hash(int i,int L){
            return H[i]-H[i+L]*XL[L];
        }
    }hs;
    
    int n,m;
    ULL a[MAX_N];
    int id[MAX_N];
    int idx;
    bool cmp(int x,int y){
        if (a[x]==a[y]) return x<y;
        return a[x]<a[y];
    }
    bool C(int L) {
        int cnt=0,sum=1;
        idx=-1;
        for (int i=0;i+L<=n;i++) {
            a[cnt]=hs.hash(i,L);
            id[cnt++]=i;
        }
        sort(id,id+cnt,cmp);
        for (int i=1;i<cnt;i++) {
            if (a[id[i]]==a[id[i-1]]) {
                sum++;
                if (sum>=m) idx=max(idx,id[i]);
            }
            else sum=1;
        }
        return idx>=0;
    }
    
    int main(){
        while (~scanf("%d",&m)) {
            if (m==0) break;
            scanf("%s",s);
            hs.build(s);
            n=strlen(s);
            if(m==1) {
                printf("%d %d
    ",n,0);
                continue;
            }
            if(!C(1)) {
                printf("none
    ");
                continue;
            }
            int l=1,r=n;
            int ans=0;
            while (l<=r) {
                int mid=(l+r)>>1;
                if (C(mid)) {
                    ans=mid;
                    l=mid+1;
                }
                else r=mid-1;
            }
            C(ans);
            if (ans==0) printf("none
    ");
            else printf("%d %d
    ",ans,idx);
        }
    	return 0;
    }
    

    ------------

  • 相关阅读:
    ES6变量的解构赋值
    ES6新增内容
    Rvalue references
    range-based for statement
    Space in Template Expression, nullptr, and auto
    Type Alias、noexcept、override、final
    Variadic Template
    =default =delete
    为什么不要特化函数模版?
    boost::noncopyable 的作用
  • 原文地址:https://www.cnblogs.com/cyendra/p/3681528.html
Copyright © 2020-2023  润新知