• bzoj5130: [Lydsy1712月赛]字符串的周期


    这道题很有意思啊。

    字符串循环节用KMP(手推一下)

    假如是26^12肯定很不滋磁

    但是可以发现ABA和BCB和BAB这些都是等价的

    那就把最小的拿出来搞再乘个排列数就好了

    #include<cstdio>
    #include<iostream> 
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    const LL mod=998244353;
    
    int n,m,a[20],p[20];LL mi[20],ans;
    LL KMP()
    {
        p[1]=0;int j=0;
        for(int i=2;i<=n;i++)
        {
            while(j>0&&a[j+1]!=a[i])j=p[j];
            if(a[j+1]==a[i])j++;
            p[i]=j;
        }
        
        LL ret=1;
        for(int i=1;i<=n;i++)
            ret=(ret*(i-p[i]))%mod;
        return ret;
    }
    void dfs(int k,int maxp)
    {
        if(k==n+1)
        {
            ans=(ans+mi[maxp]*KMP())%mod;
            return ;
        }
        for(int i=1;i<=maxp;i++)
        {
            a[k]=i;
            dfs(k+1,maxp);
            a[k]=0;
        }
        a[k]=++maxp;dfs(k+1,maxp);
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        mi[0]=1;for(int i=1;i<=n;i++)mi[i]=(mi[i-1]*(m-i+1))%mod;
        ans=0;dfs(1,0);
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    LabelImg 图像图像标注工具
    周杰伦的2000w个故事
    ROS 订阅图像节点(1)
    ROS 订阅图像节点
    ROS 双目标定
    书籍
    Z30云台PC控制问题
    大疆M600组装和试飞
    M100 X3云台安装
    M100 组装教程
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/9703389.html
Copyright © 2020-2023  润新知