• [POI2012]OKR-A Horrible Poem


    正解:对于一个区间l,r,它的循环节长度一定是它的因数。

    然后如果循环节是这个长度,那么[l+len,r]一定等于[l,r-len]。

    然后每次询问的时候就把它的长度的最小质因子提出来。

    BZOJ上都A了,然而LOJ上T了一个点。

    //<!--
    //                       ::
    //                      :;J7, :,                        ::;7:
    //                      ,ivYi, ,                       ;LLLFS:
    //                      :iv7Yi                       :7ri;j5PL
    //                     ,:ivYLvr                    ,ivrrirrY2X,
    //                     :;r@Wwz.7r:                :ivu@kexianli.
    //                    :iL7::,:::iiirii:ii;::::,,irvF7rvvLujL7ur
    //                   ri::,:,::i:iiiiiii:i:irrv177JX7rYXqZEkvv17
    //                ;i:, , ::::iirrririi:i:::iiir2XXvii;L8OGJr71i
    //              :,, ,,:   ,::ir@mingyi.irii:i:::j1jri7ZBOS7ivv,
    //                 ,::,    ::rv77iiiriii:iii:i::,rvLq@huhao.Li
    //             ,,      ,, ,:ir7ir::,:::i;ir:::i:i::rSGGYri712:
    //           :::  ,v7r:: ::rrv77:, ,, ,:i7rrii:::::, ir7ri7Lri
    //          ,     2OBBOi,iiir;r::        ,irriiii::,, ,iv7Luur:
    //        ,,     i78MBBi,:,:::,:,  :7FSL: ,iriii:::i::,,:rLqXv::
    //        :      iuMMP: :,:::,:ii;2GY7OBB0viiii:i:iii:i:::iJqL;::
    //       ,     ::::i   ,,,,, ::LuBBu BBBBBErii:i:i:i:i:i:i:r77ii
    //      ,       :       , ,,:::rruBZ1MBBqi, :,,,:::,::::::iiriri:
    //     ,               ,,,,::::i:  @arqiao.       ,:,, ,:::ii;i7:
    //    :,       WJMZBMR   ,,:::::,:::::::::,,   ,:i,:,,,,,::i:iiii
    //    ::      BBBBBBBBB0,    ,,::: , ,:::::: ,      ,,,, ,,:::::::
    //    i,  ,  ,8BMMBBBBBBi     ,,:,,     ,,, , ,   , , , :,::ii::i::
    //    :      iZMOMOMBBM2::::::::::,,,,     ,,,,,,:,,,::::i:irr:i:::,
    //    i   ,,:;u0MBMOG1L:::i::::::  ,,,::,   ,,, ::::::i:i:iirii:i:i:
    //    :    ,iuUuuXUkFu7i:iii:i:::, :,:,: ::::::::i:i:::::iirr7iiri::
    //    :     :rk@Yizero.i:::::, ,:ii:::::::i:::::i::,::::iirrriiiri::,
    //     :      5BMBBBBBBSr:,::rv2kuii:::iii::,:i:,, , ,,:,:i@petermu.,
    //          , :r50EZ8MBBBBGOBBBZP7::::i::,:::::,: :,:,::i;rrririiii::
    //              :jujYY7LS0ujJL7r::,::i::,::::::::::::::iirirrrrrrr:ii:
    //           ,:  :@kevensun.:,:,,,::::i:i:::::,,::::::iir;ii;7v77;ii;i,
    //           ,,,     ,,:,::::::i:iiiii:i::::,, ::::iiiir@xingjief.r;7:i,
    //        , , ,,,:,,::::::::iiiiiiiiii:,:,:::::::::iiir;ri7vL77rrirri::
    //         :,, , ::::::::i:::i:::i:i::,,,,,:,::i:i:::iir;@Secbone.ii:::
    //
    //-->
    #include <iostream>
    #include <cstdio>
    #include <vector>
    #include <cstring>
    using namespace std;
    const int base=37,mod=998244353;
    int n,mnpr[500005],tot,prim[500005];
    bool vis[500005];
    unsigned long long pow[500005];
    unsigned long long hsh[500005];
    char s[500005];
    #define gc getchar
    inline int rd() {
        register int x=0;register char ch=gc();
        while(!isdigit(ch)) ch=gc();
        while(isdigit(ch)) {x=x*10ll+(ch^48);ch=gc();}
        return x;
    }
    unsigned long long gethsh(int l,int r) {
        return (hsh[r]-hsh[l-1]*pow[r-l+1]%mod+mod)%mod;
    }
    void getmn() {
        mnpr[1]=1;
        for(int i=2;i<=500000;i++) {
            if(!vis[i]) prim[++tot]=i,vis[i]=1,mnpr[i]=i;
            for(int j=1;j<=tot&&prim[j]*i<=500000;j++) {
                vis[i*prim[j]]=1;mnpr[i*prim[j]]=min(mnpr[i*prim[j]],prim[j]);
                if(i%prim[j]==0) {mnpr[i]=prim[j];break;}
            }
        }
    }
    int main() {
         memset(mnpr,0x3f,sizeof mnpr);
        n=rd();
        char ch=gc();
        while(ch<'a'||ch<'z')ch=gc();
        for(int i=1;i<=n;i++) s[i]=ch,ch=gc();
        getmn();
        pow[0]=1;
        hsh[0]=1;
        for(int i=1;i<=n;i++) {
            hsh[i]=(hsh[i-1]*base+s[i]-'a'+1)%mod;
            pow[i]=pow[i-1]*base%mod;
        }
        int q,l,r;
        q=rd();
        while(q--) {
            l=rd();r=rd();
            if(l>r) swap(l,r);
            int len=r-l+1,ans=len;
            while(len!=1&&len>0) {
                if(gethsh(l,r-ans/mnpr[len])==gethsh(l+ans/mnpr[len],r)) ans=ans/mnpr[len];
                len=len/mnpr[len];
            }
            printf("%d
    ",ans);
        }
    }
    OKR
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    eclipse luna maven失效的原因
    利用线性探测法解决hash冲突
    PHP和JavaScript将字符串转换为数字string2int
    JavaScript 编程易错点整理
    使用phpstudy创建本地虚拟主机
    单例模式
    PHP使用cookie时遇到的坑
    Redis安装与配置
    CI框架2.x的验证码中所遇问题解决
    用delete和trancate删除表记录的区别
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9755049.html
Copyright © 2020-2023  润新知