bzoj5130 字符串的周期(kmp,最小表示法)
bzoj5130 字符串的周期(kmp,最小表示法)
题解时间
m很大,n很小。
周期很容易求,就是kmp之后n-fail[n]。
之后对于枚举所有的字符串用最小表示法,暴力搜索。
能过就完事了。
#include<bits/stdc++.h>
using namespace std;
typedef long long lint;
struct pat{int x,y;pat(int x=0,int y=0):x(x),y(y){}bool operator<(const pat &p)const{return x==p.x?y<p.y:x<p.x;}};
template<typename TP>inline void read(TP &tar)
{
TP ret=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){ret=ret*10+(ch-'0');ch=getchar();}
tar=ret*f;
}
namespace RKK
{
const int N=20,mo=998244353;
void doadd(lint &a,lint b){if((a+=b)>=mo) a-=mo;}
int n;lint m;
int s[N],fail[N];
lint am[N];
lint ans;
void dfs(int dep,int cnt)
{
if(dep==n)
{
// cerr<<"sora"<<endl;
lint tmp=1;
for(int i=2,j=0;i<=n;i++)
{
while(j&&s[j+1]!=s[i]) j=fail[j];
fail[i]=s[j+1]==s[i]?++j:j;
(tmp*=(i-j))%=mo;
// cerr<<tmp<<endl;
}
doadd(ans,tmp*am[cnt]%mo);return;
}
for(int i=1;i<=cnt;i++) s[dep+1]=i,dfs(dep+1,cnt);s[dep+1]=cnt+1,dfs(dep+1,cnt+1);
}
int main()
{
#ifdef RDEBUG
freopen("sample.in","r",stdin);
#endif
read(n),read(m);am[0]=1;for(int i=1;i<=n;i++) am[i]=am[i-1]*(m-i+1)%mo;
dfs(0,0);printf("%lld\n",ans);
return 0;
}
}
int main(){return RKK::main();}
bzoj5130 字符串的周期(kmp,最小表示法)的更多相关文章
- hdu5442(2015长春赛区网络赛1006)后缀数组+KMP /最小表示法?
题意:给定一个由小写字母组成的长度为 n 的字符串,首尾相连,可以从任意一个字符开始,顺时针或逆时针取这个串(长度为 n),求一个字典序最大的字符串的开始字符位置和顺时针或逆时针.如果有多个字典序最大 ...
- hdu3374 kmp+最小表示法
Give you a string with length N, you can generate N strings by left shifts. For example let consider ...
- hdu-3374(kmp+最小表示法)
题意:给你一个字符串,这个字符串我们可以把把他变成n个字符串按照以下规则:将当前字符串第一个放到字符串最后一位,字符串的下标依次向前推一位,比如:s[1] s[2 ]s[3] s[4]->s[2 ...
- hdu 3374 String Problem(kmp+最小表示法)
Problem Description Give you a string with length N, you can generate N strings by left shifts. For ...
- POJ1509 Glass Beads(最小表示法 后缀自动机)
Time Limit: 3000MS Memory Limit: 10000K Total Submissions: 4901 Accepted: 2765 Description Once ...
- [coj 1353 Guessing the Number]kmp,字符串最小表示法
题意:给一个字符串,求它的最小子串,使得原串是通过它重复得到的字符串的一个子串. 思路:先求最小长度,最小循环长度可以利用kmp的next数组快速得到,求出长度后然后利用字符串最小表示法求循环节的最小 ...
- hdu3374 String Problem KMP+最大最小表示法
Give you a string with length N, you can generate N strings by left shifts. For example let consider ...
- Hdu 5442 Favorite Donut (2015 ACM/ICPC Asia Regional Changchun Online 最大最小表示法 + KMP)
题目链接: Hdu 5442 Favorite Donut 题目描述: 给出一个文本串,找出顺时针或者逆时针循环旋转后,字典序最大的那个字符串,字典序最大的字符串如果有多个,就输出下标最小的那个,如果 ...
- HDU-3374-String Problem(最小表示法, KMP)
链接: https://vjudge.net/problem/HDU-3374 题意: Give you a string with length N, you can generate N stri ...
随机推荐
- Spring AOP应用之一:声明式事务
所有数据访问技术都提供事务处理机制,这些技术提供了API用来开启事务.提交事务完成数据操作,或者在发生错误的时候回滚数据.Spring本身并不支持事务实现,同时只是负责提供标准接口来处理不同数据访问技 ...
- JAVA8学习——Stream底层的实现四(学习过程)
Stream的深入(四) 从更高角度去看一下:类与类之间的设计关系 (借助IDEA的图形处理工具 Ctrl+Alt+U). ReferencePipeline的三个实现的子类: Head Statel ...
- python开启httpserver
- 过分简单,Tabluea仪表板与Smartbi自助仪表盘制作流程分享
上一章节介绍了如何接入数据到系统里面,并且对数据进行处理.那本章节与大家分享Smartbi及Tabluea是如何对数据进行仪表盘制作. 这就是Tabluea的工作簿界面,这也是Tabluea可 ...
- 数据可视化地图制作教程,这个免费BI软件轻松搞定
数据可视化地图制作教程 现在做数据分析基本上离不开数据可视化,在大量的数据中,有很大一部分数据都与地理信息相关,因此,在数据可视化中,可视化地图是非常重要的一部分.无论是新闻报道,还是商业分析报告, ...
- 技术小白的也能独立完成数据分析,这款BI系统你值得拥有
是否有很多小白跟我一样,不会编程代码,又觉得excel操作太繁琐了,一直苦苦不知道要怎么做数据分析.前段时间我使用了一款bi系统,简直太方便了!拖拉拽就能制作分析图表.点击就能应用智能分析功能,如果这 ...
- linux服务器随机10字符病毒/libudev4.so病毒清理的过程
故障表现:某天晚上突然收到某项目一台web服务器CPU报警,SSH连接困难卡顿,登陆后发现CPU使用率飙升到700%,第一感觉是被黑了,来事了. 故障处理: 1.登陆上后发现有好多莫名的命令(who/ ...
- 【C# 线程】线程局部存储(TLS)理论部分 ThreadStatic|LocalDataStoreSlot|ThreadLocal<T>
线程本地存储(TLS:Thread Local Storage) 线程本地存储(Thread Local Storage),字面意思就是专属某个线程的存储空间.变量大体上分为全局变量和局部变量,一个进 ...
- UML 包图 详细介绍
6.1 包图的概念 包是一种常规用途的组合机制.UML中的一个包直接对应于Java中的一个包,C#中的命名空间.在Java中,一个包可能含有其他包.类或者同时含有这两者.进行建模时,通常使用逻辑性 ...
- Oracle数据库的下载、安装与卸载
Oracle数据库下载: 这里以Oracle 11g为例,推荐去Oracle官网下载 Oracle官网下载地址:https://www.oracle.com/database/technologies ...