BZOJ4974 字符串大师(kmp)
显然最短循环节长度=i-next[i],则相当于给定next数组构造字符串。然后按照kmp的过程模拟即可。虽然这看起来是一个染色问题,但是由图的特殊性,如果next=0只要贪心地选最小的就可以了,稍微想一下容易证明。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<cassert> using namespace std; #define ll long long #define N 100010 char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;} int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() {int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f; } int n,nxt[N]; bool flag[26]; char s[N]; int main() { #ifndef ONLINE_JUDGEfreopen("bzoj4974.in","r",stdin);freopen("bzoj4974.out","w",stdout);const char LL[]="%I64d\n"; #elseconst char LL[]="%lld\n"; #endifn=read();for (int i=1;i<=n;i++) nxt[i]=i-read();nxt[0]=-1;for (int i=1;i<=n;i++){int j=nxt[i-1];memset(flag,0,sizeof(flag));while (~j&&j+1!=nxt[i]) flag[s[j+1]-'a']=1,j=nxt[j];if (j==-1) {for (int j=0;j<26;j++) if (!flag[j]) {s[i]=j+'a';break;}}else s[i]=s[j+1];}printf("%s",s+1);return 0; }
转载于:https://www.cnblogs.com/Gloid/p/10054430.html
BZOJ4974 字符串大师(kmp)相关推荐
- bzoj4974 字符串大师
4974: 字符串大师 Time Limit: 1 Sec Memory Limit: 256 MB Submit: 310 Solved: 155 [Submit][Status][Discus ...
- 【bzoj4974】字符串大师 逆模拟KMP
题目描述 一个串T是S的循环节,当且仅当存在正整数k,使得S是$T^k$(即T重复k次)的前缀,比如abcd是abcdabcdab的循环节.给定一个长度为n的仅由小写字符构成的字符串S,请对于每个k( ...
- bzoj-4974 [Lydsy1708月赛]字符串大师
4974: [Lydsy1708月赛]字符串大师 题目链接 Time Limit: 1 Sec Memory Limit: 256 MB Submit: 721 Solved: 347 [Submit ...
- BZOJ 4974: 字符串大师
一个串T是S的循环节,当且仅当存在正整数k,使得S是T^k(即T重复k次)的前缀,比如abcd是abcdabcdab的循环节 .给定一个长度为n的仅由小写字符构成的字符串S,请对于每个k(1<= ...
- js实现kmp算法_「leetcode」459.重复的子字符串:KMP算法还能干这个!
不瞒你说,重复子串问题,KMP很拿手 题目459.重复的子字符串 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: ...
- 【2023王道数据结构】【字符串匹配算法】字符串的KMP(next数组)模式匹配算法C、C++完整实现(可直接运行)
~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 字符串的KMP(next)模式匹配算 ...
- 【GO语言实现字符串匹配算法-KMP算法】
[GO语言实现字符串匹配算法-KMP算法] KMP算法原理说明: KMP算法是一种改进的字符串匹配算法,是有D.E.Knuth,J.H.Morris和V.R.Pratt提出的,所以被称为KMP算法. ...
- bzoj4974: [Lydsy1708月赛]字符串大师
脑洞题...玄学 假如是a[i]!=i,说明构成了循环节长为a[i]的循环,那就去%一下(别想多)看一下是循环节中的第几个咯. 否则新填的这个不能和前面构成任何循环,那就不停往前跳去把不能填的标记一下 ...
- 0x15.基本数据结构 — 字符串 (KMP算法(含详细证明)和最小表示法)
目录 一.KMP模式匹配 1.引理: 2.引理证明: 3.使用优化的算法计算nextnextnext数组: 4.luogu P3375 [模板]KMP字符串匹配 5.UVA1328 Period 6. ...
最新文章
- Nginx使用uninx socket来连接fastcgi(php)
- 剖析数组名、函数名(不是指针常量,更不是指针)
- 磁盘阵列怎么做_设计与后期制作该怎么选择笔记本电脑?朋克老师来教你
- 解决TeXstudio外部查看器失败方法
- Ubuntu 18.04 修复 Linux 内核的 11 个漏洞
- linux生成大文件
- 5个数中取三个数组合 不重复 php,PHP产生不重复随机数的5个方法总结
- [转]亚稳态和毛刺 - Metastability and Hazard(CN)
- mysql 特殊函数_mysql 的特殊函数
- paip.验证码识别---初始化
- 模糊C均值聚类算法及实现
- 【第一阶段 day25 面向对象】 多态
- 7-2 学生成绩排序 (15 分)
- 冬季下肢静脉曲张如何治疗
- 计算机中桌面位置更改,电脑默认桌面文件夹位置修改不了怎么办
- 两位数码管秒表c语言,单片机C语言编程实现双数码管可调秒表
- 通过FAR计算fRR
- 文本相关_SAP刘梦_新浪博客
- 想学温州蛮话?我教你..
- JavaScript资源大全中文版(Awesome最新版--转载自张果老师博客)