KMP

  • 重点:失配nxtnxtnxt数组

    • 意义:nxt[i]nxt[i]nxt[i]表示在[0,i−1][0,i-1][0,i−1]内最长相同前后缀的长度
    • 图示:
      • 此时nxt[i]=jnxt[i]=jnxt[i]=j,即指向最长相同前后缀的后一位置,数值上是最长相同钱后缀的长度
    • 求法:假设我们已知nxt[i−1]nxt[i-1]nxt[i−1],想要求nxt[i]nxt[i]nxt[i]
      • 当str(nxt[i−1])=str(i−1)str(nxt[i-1])=str(i-1)str(nxt[i−1])=str(i−1),显然有nxt[i]=nxt[i−1]+1nxt[i]=nxt[i-1]+1nxt[i]=nxt[i−1]+1
      • 当str(nxt[i−1])≠str(i−1)str(nxt[i-1])\neq str(i-1)str(nxt[i−1])̸​=str(i−1),那么就要往更前面找。因为已知nxt[i−1]nxt[i-1]nxt[i−1],所以必定出现如下①、②的两段是[0...i−2][0...i-2][0...i−2]的最长相同前后缀。jjj是nxt[nxt[i−1]]nxt[nxt[i-1]]nxt[nxt[i−1]],所以只要jjj与i−1i-1i−1配对即可。如果不行,那就如此反复下去,一直到头。其实也可以把这个过程看作自己和自己匹配

一道题目:BZOJ 4974[Lydsy1708月赛]字符串大师

题目链接:BZOJ 4974[Lydsy1708月赛]字符串大师

  • 稍微做判断可得到,给出的perperper数组满足性质:pre[i]=i−nxt[i]pre[i]=i-nxt[i]pre[i]=i−nxt[i]
  • 于是求出nxtnxtnxt数组后考虑怎么构造,只要满足位置iii的值等于nxt[i+1]nxt[i+1]nxt[i+1]的值就行了。如果nxt[i+1]nxt[i+1]nxt[i+1]等于0,就在沿nxt移动过程中,打一下标记,最后取最小字典序就行了

AC code

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 100005;
int n, nxt[MAXN], str[MAXN];
bool vis[MAXN][26]; int main()
{
scanf("%d", &n);
for(int i = 1, x; i <= n; ++i)
scanf("%d", &x), nxt[i] = i-x;
nxt[0] = -1;
for(int i = 0; i < n; ++i)
{
int j = nxt[i], k;
while(nxt[i+1] != j+1)
vis[i][str[j]] = 1, j = nxt[j];
if(~j) str[i] = str[j];
else
{
for(k = 0; k < 26; ++k)
if(!vis[i][k]) break;
str[i] = k;
}
}
for(int i = 0; i < n; ++i) putchar('a'+str[i]);
}

KMP + BZOJ 4974 [Lydsy1708月赛]字符串大师的更多相关文章

  1. bzoj 4974 [Lydsy1708月赛]字符串大师 KMP 最小循环元 构造

    LINK:字符串大师 给出一个字符串的每个前缀的最小循环元 还原字典序最小的原字符串. 一个比较显然的结论 或者说 学过KMP的都知道 对于每个前缀i求出nex数组后 那么i-nex[i]为最小循环元 ...

  2. BZOJ4974:[Lydsy1708月赛]字符串大师(逆模拟KMP)

    题目描述 一个串T是S的循环节,当且仅当存在正整数k,使得S是T k  Tk (即T重复k次)的前缀,比如abcd是abcdabcdab的循环节.给定一个长度为n的仅由小写字符构成的字符串S,请对于每 ...

  3. 【思维题 kmp 构造】bzoj4974: [Lydsy1708月赛]字符串大师

    字符串思博题这一块还是有点薄弱啊. Description 一个串T是S的循环节,当且仅当存在正整数k,使得S是T^k(即T重复k次)的前缀,比如abcd是abcdabcdab的循环节 .给定一个长度 ...

  4. BZOJ4974:[lydsy1708月赛]字符串大师

    浅谈\(KMP\):https://www.cnblogs.com/AKMer/p/10438148.html 题目传送门:https://lydsy.com/JudgeOnline/problem. ...

  5. bzoj4974: [Lydsy1708月赛]字符串大师

    脑洞题...玄学 假如是a[i]!=i,说明构成了循环节长为a[i]的循环,那就去%一下(别想多)看一下是循环节中的第几个咯. 否则新填的这个不能和前面构成任何循环,那就不停往前跳去把不能填的标记一下 ...

  6. bzoj 4974: [Lydsy八月月赛]字符串大师

    4974: [Lydsy八月月赛]字符串大师 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 371  Solved: 190[Submit][Statu ...

  7. BZOJ4974 大视野1708月赛 字符串大师

    传送门 题目大意 给定一个字符串的每一个前缀的最短循环节长度,求符合要求的字典序最小的字符串. 题解 给定循环节最短长度就是给定了这个字符串$kmp$的$next$数组,即$X_i=i-next_i$ ...

  8. bzoj4974: [Lydsy八月月赛]字符串大师

    传送门 题目可转换为已知一个串kmp之后的nxt数组,求字典序最小的原串. 已知第i位结尾的串循环节长度位x,那么nxt[i]=i-x; 当nxt不为0时,s[i]=s[nxt[i]]; nxt为0时 ...

  9. 【刷题】BZOJ 4977 [Lydsy1708月赛]跳伞求生

    Description 小Q最近沉迷于<跳伞求生>游戏.他组建了一支由n名玩家(包括他自己)组成的战队,编号依次为1到n.这个游 戏中,每局游戏开始时,所有玩家都会从飞机上跳伞,选择一个目 ...

随机推荐

  1. UV数据与风速风向数据转换

    package com.qr.util; import java.text.DecimalFormat; /** * //TODO UV数据与风速风向数据转换 */ public class UVAn ...

  2. Python多进程方式抓取基金网站内容的方法分析

    因为进程也不是越多越好,我们计划分3个进程执行.意思就是 :把总共要抓取的28页分成三部分. 怎么分呢? # 初始range r = range(1,29) # 步长 step = 10 myList ...

  3. uwsgi重启shell脚本

    一.概述 工作中使用uwsgi时,每次需要进入到工作目录,去执行uwsgi相关命令,比较繁琐.这里整理了一个uwsgi重启脚本! 根据参考链接,修改了部分内容(定义了变量,修复了一些bug,增加了颜色 ...

  4. Linux 6 本地网络配置方法

    在Linux 6 系统安装完成后,需要对网络进行一系列的配置,有些朋友喜欢使用桌面图形化工具的配置方式,这种配置方法虽说比较方便,但是在某些时候并不问题,总是会出现各种问题.特别是作为服务器用途的时候 ...

  5. 软件平台ThinkSNS+软件系统研发日记

    NO.1: 实用开源软件安装部署是第一步, ThinkSNS+响应快速安装,易于二开基准,为大家录制了一份宝塔面板安装社交系统ThinkSNS+视频教程,点开观看视频一起吸一吸. 若无法播放,请直接打 ...

  6. vuecli3的项目搭建

    1.卸载旧版本 npm uninstall vue-cli -g 或者 yarn global remove vue-cli 2.安装cli3脚手架 npm install -g @vue/cli 或 ...

  7. FlaskCBV视图类

    路由视图类 from flask import Flask app = Flask(name) 视图类 Views文件 看views源码 继承最后一个类 导入CBV的视图基类 from flask i ...

  8. C#数字千分位

    C#中把数字转换成带两位小数的千分位字符 如1234567.891变成1,234,567.89 方法:String.Format("{0:N}",1234567.891);   / ...

  9. layui加载显示问题

    1.layui.config({ base: '../layuiadmin/' //静态资源所在路径 }).extend({ index: 'lib/index' //主入口模块 }).use(['i ...

  10. oracle instantclient_12_2安装

    下载地址 http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index ...