题目传送门

  需要root权限的传送点

题目大意

  已知一个串,以每个字符为中心的最长回文串长,以及每两个字符中间为中心的最长回文串长。求字典序最小的这样一个串。题目保证有解。

  考虑Manacher的过程,假设当前扩展得最远的端点是$mx$。

  $mx$之内的部分可以根据回文串的性质直接判掉,当$mx$被更新的时候才会出现新的相等关系。

  由于题目给出的是最长回文串串长,所以还需要一些不等关系。

  因为字符集很小,所以直接开数组打标记就好了。

Code

 #include <bits/stdc++.h>
using namespace std;
typedef bool boolean; const int N = 1e5 + , alpha = ; int n;
int ar[N], br[N];
boolean ban[N][alpha];
char s[N]; inline void init() {
scanf("%d", &n);
for (int i = ; i <= n; i++)
scanf("%d", ar + i);
for (int i = ; i < n; i++)
scanf("%d", br + i);
} inline void solve() {
int mx = , r, l;
for (int i = ; i < n; i++) {
if (!s[i]) {
for ( ; ban[i][s[i]]; s[i]++);
s[i] += 'a';
}
r = i + (ar[i] >> ), l = i - (ar[i] >> );
if (mx < r) {
for (mx = mx + ; mx < r; mx++)
s[mx] = s[ * i - mx];
s[mx] = s[ * i - mx];
}
if (l > )
ban[r + ][s[l - ] - 'a'] = true;
r = i + (br[i] >> ), l = r - br[i] + ;
if (mx < r) {
for (mx = mx + ; mx < r; mx++)
s[mx] = s[ * i - mx + ];
s[mx] = s[ * i - mx + ];
}
if (l > )
ban[r + ][s[l - ] - 'a'] = true;
}
if (!s[n]) {
for ( ; ban[n][s[n]]; s[n]++);
s[n] += 'a';
}
puts(s + );
} int main() {
init();
solve();
return ;
}

bzoj 3325 密码 - Manacher的更多相关文章

  1. BZOJ 3325 [SCOI2013]密码 (逆模拟Manacher+构造)

    题目大意:给你一个字符串每个位置和相邻两个位置为回文中心的最长回文串长度,让你构造一个合法的字典序最小的字符串 挺有意思的构造题 首先按照$Manacher$的思想还原$p$数组 定义$f_{ij}$ ...

  2. bzoj 2084 Antisymmetry - Manacher

    题目传送门 需要高级权限的传送门 题目大意 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串. 问给定长度为$n$的一个01串有多少个子串是反对称的 ...

  3. 【BZOJ3325】[Scoi2013]密码 Manacher

    [BZOJ3325][Scoi2013]密码 Description Fish是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进. ...

  4. BZOJ 3160 FFT+Manacher

    思路: 这道题思路好奇怪--. 我们先要知道关于x (x可以是间隙) 对称的有几对字母 显然暴力是n^2的 那怎么办呢 先把所有'a'看成1 'b'看成0 意外的发现 这不就是卷积嘛 再倒过来搞一搞 ...

  5. 【BZOJ】【3439】Kpm的MC密码

    Trie树/可持久化线段树 神题啊……搞了我一下午= =(其实第233个提交也是我的) 我一开始的思路:这个找kpm串的过程,其实就跟在AC自动机上沿fail倒着往下走是差不多的(看当前是哪些点的后缀 ...

  6. Manacher思想 SCOI2013 密码

    关于$\mathrm{Manacher}$算法,网上介绍已经很全面 这里说一下自己的理解 这里的$rad$数组:$rad_i$表示以以位置i为中心的最长回文串的回文半径(不包括i这个点). 朴素的思想 ...

  7. 【bzoj 1414】对称的正方形 单调队列+manacher

    Description Orez很喜欢搜集一些神秘的数据,并经常把它们排成一个矩阵进行研究.最近,Orez又得到了一些数据,并已经把它们排成了一个n行m列的矩阵.通过观察,Orez发现这些数据蕴涵了一 ...

  8. BZOJ.2565.[国家集训队]最长双回文串(Manacher/回文树)

    BZOJ 洛谷 求给定串的最长双回文串. \(n\leq10^5\). Manacher: 记\(R_i\)表示以\(i\)位置为结尾的最长回文串长度,\(L_i\)表示以\(i\)开头的最长回文串长 ...

  9. bzoj 4447 小凸解密码

    bzoj 4447 小凸解密码 先将原始状态的 \(B\) 处理出来,可以发现,若不修改,则每次指定的起始位置不同,对这个环 \(B\) 带来的影响只有 \(B_0\) 不同,即每次 \(B_0=A_ ...

随机推荐

  1. 使用socat查看ios日志

    仅供记录自己查看 mac连接ios后进程ios shell apt-get socat安装 socat socat - UNIX-CONNECT:/var/run/lockdown/syslog.so ...

  2. gitlab4.0备份还原

    一,备份 备份默认路径查看: gitlab/config/gitlab.yml 中的backup: 默认tmp/backups ====>这个是gitlab/tmp/backups/  可不是系 ...

  3. MyBatis基础入门《六》Like模糊查询

    MyBatis基础入门<六>Like模糊查询 描述: 未改动的文件,不再粘贴出来.项目中SQL的xml映射文件重要标签如下: mapper namespace cache 配置给定命令空间 ...

  4. Ubuntu系统添加搜狗输入法

    前端开发时有时候要接触到Ubuntu系统,但由于本身没有拼音输入,故需要自己安装搜狗,记录方法如下: 1.安装前先升级资源库并安装输入法依赖包: $sudo apt-get update $sudo ...

  5. python 定义类 简单使用

    在test.py文件里面 #coding=utf-8 #类的定义 class user: #定义私有属性 __name = '' __age = 0 #定义基本属性 sex = '' #定义构造函数 ...

  6. python:基于tkinter的定时关机程

    本人使用python3 from tkinter import* import os from PIL import Image, ImageTk root=Tk() a=Label(root,tex ...

  7. mysql避免脏读

    mysql避免脏读   在MySQL的InnoDB中,预设的Tansaction isolation level 为REPEATABLE READ(可重读) 在SELECT 的读取锁定主要分为两种方式 ...

  8. RobotFrameWork(一)robotfamework(python版)及Ride在windows安装

    1.windows下的安装 (1)准备条件: python-2.7.3.msi robotframework-2.7.5.win32.exe wxPython2.8-win32-unicode-2.8 ...

  9. RabbitMQ生产者消费者

    package com.ra.car.rabbitMQ; import java.io.IOException; import java.util.HashMap; import java.util. ...

  10. 【Hbase学习之一】Hbase 简介

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-2.1.3 ...