【BZOJ4974】字符串大师 KMP
【BZOJ4974】字符串大师
Description
Input
Output
Sample Input
1 2 2 2 5
Sample Output
题解:常识:一个前缀的最小循环节=i-next[i](如果有的话),所以我们已经知道了next。
我们模拟KMP的过程,正常的KMP是如果str[i]=str[j],则更新next[i],那么我们反过来想,如果next在此处被更新了,则说明str[i]=str[j],否则str[i]!=str[j]。那么我们就得到了一堆相等和不等条件。
如何出解呢?相等条件直接做即可;不相等条件:让i的值为i可以取到的,最小的字符即可。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=100010;
int n;
char str[maxn];
int f[maxn][26],next[maxn];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
int main()
{
n=rd();
int i,j,k;
for(i=1;i<=n;i++) next[i]=i-rd();
i=0,j=-1,next[0]=-1;
while(i<n)
{
if(next[i+1]==j+1)
{
if(j!=-1) str[i]=str[j];
else
{
for(k=0;k<26;k++) if(!f[i][k]) break;
str[i]='a'+k;
}
i++,j++;
}
else
{
f[i][str[j]-'a']=1;
j=next[j];
}
}
printf("%s",str);
return 0;
}
【BZOJ4974】字符串大师 KMP的更多相关文章
- bzoj4974 字符串大师 KMP
		
明显的,有$next[i] = i - pre[i]$ 根据$next[i]$构造比根据$pre[i]$简单 如果$next[i] \neq 0$,那么我们可以直接取前面的结果 否则,我们可以暴力的寻 ...
 - BZOJ4974 八月月赛 Problem D 字符串大师  KMP
		
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4974 - 八月月赛 Problem D 题意概括 一个串T是S的循环节,当且仅当存在正整数k,使得 ...
 - bzoj4974 字符串大师
		
4974: 字符串大师 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 310 Solved: 155[Submit][Status][Discuss] ...
 - [BZOJ4947] 字符串大师 - KMP
		
4974: [Lydsy1708月赛]字符串大师 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 739 Solved: 358[Submit][Sta ...
 - bzoj 4974  [Lydsy1708月赛]字符串大师 KMP 最小循环元 构造
		
LINK:字符串大师 给出一个字符串的每个前缀的最小循环元 还原字典序最小的原字符串. 一个比较显然的结论 或者说 学过KMP的都知道 对于每个前缀i求出nex数组后 那么i-nex[i]为最小循环元 ...
 - BZOJ4974 字符串大师(kmp)
		
显然最短循环节长度=i-next[i],则相当于给定next数组构造字符串.然后按照kmp的过程模拟即可.虽然这看起来是一个染色问题,但是由图的特殊性,如果next=0只要贪心地选最小的就可以了,稍微 ...
 - BZOJ4974:[Lydsy1708月赛]字符串大师(逆模拟KMP)
		
题目描述 一个串T是S的循环节,当且仅当存在正整数k,使得S是T k Tk (即T重复k次)的前缀,比如abcd是abcdabcdab的循环节.给定一个长度为n的仅由小写字符构成的字符串S,请对于每 ...
 - 【bzoj4974】字符串大师  逆模拟KMP
		
题目描述 一个串T是S的循环节,当且仅当存在正整数k,使得S是$T^k$(即T重复k次)的前缀,比如abcd是abcdabcdab的循环节.给定一个长度为n的仅由小写字符构成的字符串S,请对于每个k( ...
 - 【思维题  kmp  构造】bzoj4974: [Lydsy1708月赛]字符串大师
		
字符串思博题这一块还是有点薄弱啊. Description 一个串T是S的循环节,当且仅当存在正整数k,使得S是T^k(即T重复k次)的前缀,比如abcd是abcdabcdab的循环节 .给定一个长度 ...
 
随机推荐
- B2:观察者模式 Observer
			
定义了一种一对多的依赖关系,多个观察者对象同时监听某一主题的变化,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们可以更新自己. 应用场景:某个实例的变化影响到了其他对象. UML: 示例代 ...
 - 微信小程序flex容器属性详解
			
flex容器属性详解 flex-direction决定元素的排列方向 flex-wrap决定元素如何换行 flex-flow 是 flex-direction 和flex-wrap的简写 justif ...
 - 安卓File类汇总
			
File类 构造函数 參数 File(File dir,String name) File制定构造的新的File对象的路径.而String制定新的File名字 File(String path) St ...
 - OpenStack-Heat中的AWS::WaitCondition的使用
			
在heat中.一个instance的创建成功信号是在这个instance状态成为active之后发出的,这时候user-data可能还没有运行.可是heat已经觉得这个resource创建成功了,開始 ...
 - 基于python的ardrone control源码分析与心得
			
这里有一段python代码,可用于操控ardrone 2.0.实验室曾经借鉴用过,并添加了部分功能.如今复习一下,顺便理理python的相关知识点. #!/usr/bin/env python # A ...
 - 在Gridview中输入小数时报对于int32 太大或太小
			
使用Datagridview绑定Access数据库,对于数字类型的数据输入小数后报以下错误: 根据错误判断应该是自动检测该栏位应该输入int32类型的数值.我在数据库中定义了保留4位小数,为什么还被转 ...
 - React Native Android入门实战及深入源代码分析系列(2)——React Native源代码编译
			
本文为老曾原创.转载需注明出处:viewmode=contents">http://blog.csdn.net/minimicall?viewmode=contents 在上一节中,我 ...
 - .Net基础——程序集与CIL  HttpClient封装方法  .Net Core 编码规范  C#中invoke和beginInvoke的使用  WebServeice 动态代理类
			
.Net基础——程序集与CIL 1. 程序集和CIL: 程序集是由.NET语言的编译器接受源代码文件产生的输出文件,通常分为 exe和dll两类,其中exe包含Main入口方法可以双击执行,dll ...
 - 转 iOS:NSAttributedString
			
NSAttributedString: http://blog.csdn.net/kmyhy/article/details/8895638 CTFramesetterSuggestFrameSize ...
 - 自己动手开发更好用的markdown编辑器-04(实时预览)
			
这里文章都是从个人的github博客直接复制过来的,排版可能有点乱. 原始地址 http://benq.im/2015/04/25/hexomd-04/ 程序打包 文章目录 1. 打开新窗口 ...