题目


分析

这些回文长度可以提供相等或者不等的信息,

不等的直接连边强制不等,相等用并查集合并连通块,

但是这样判断是\(O(n^2)\),考虑这些回文长度当用Manacher求时,

所有的回文长度都会在\(O(n)\)的时间内求出来,

所以可以模拟Manacher的过程完成上述操作,时间复杂度\(O(n)\)


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=100011; struct node{int y,next;}e[N<<2];
int p[N<<1],f[N],et=1,n,as[N],col[N],v[31],upd,Mx;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline signed min(int a,int b){return a<b?a:b;}
inline signed getf(int u){return f[u]==u?u:f[u]=getf(f[u]);}
inline void Merge(int x,int y){
rr int fa=getf(x),fb=getf(y);
if (fa!=fb) f[fa]=fb;
}
inline void add(int x,int y){
e[++et]=(node){y,as[x]},as[x]=et;
e[++et]=(node){x,as[y]},as[y]=et;
}
signed main(){
n=iut(),Mx=n<<1|1,p[1]=p[Mx]=1;
for (rr int i=1;i<=n;++i) p[i<<1]=iut()+1;
for (rr int i=1;i<=n;++i) f[i]=i;
for (rr int i=1;i<n;++i) p[i<<1|1]=iut()+1;
rr int mid=1,mx=1;
for (rr int i=2;i<=n*2;++i){
rr int now=i<mx?min(p[mid*2-i],mx-i):1;
for (rr int j=now;j<p[i];++j)
if (!((i-j)&1)&&!((i+j)&1))
Merge((i-j)>>1,(i+j)>>1);
if (p[i]<i&&i+p[i]<=Mx) add((i-p[i])>>1,(i+p[i])>>1);
if (i+p[i]-1>mx) mid=i,mx=i+p[i]-1;
}
for (rr int i=1;i<=n;++i)
if (!col[getf(i)]){
v[0]=++upd;
for (rr int j=as[i];j;j=e[j].next)
if (e[j].y) v[col[getf(e[j].y)]]=upd;
while (v[col[getf(i)]]==upd) ++col[getf(i)];
}
for (rr int i=1;i<=n;++i) putchar(col[getf(i)]+96);
return 0;
}

#Manacher,并查集#洛谷 3279 [SCOI2013]密码的更多相关文章

  1. 【简单数据结构】并查集--洛谷 P1111

    题目背景 AA地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数NN,和公路数MM,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你 ...

  2. 【洛谷】P5348 密码解锁

    [洛谷]P5348 密码解锁 很显然我们可以推导出这个式子 设\(a(m)\)为\(m\)位置的值 \[ \mu(m) = \sum_{m | d} a(d) \\ a(m) = \sum_{m|d} ...

  3. 【BZOJ-2342】双倍回文 Manacher + 并查集

    2342: [Shoi2011]双倍回文 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1799  Solved: 671[Submit][Statu ...

  4. BZOJ 2342 [Shoi2011]双倍回文(manacher+并查集)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2342 [题目大意] 记Wr为W串的倒置,求最长的形如WWrWWr的串的长度. [题解] ...

  5. 洛谷 U6850 手机密码

    U6850 手机密码 题目背景 小明的手机上设了一个由四个数字组成的密码,但是小明自己的记性不好,但又不想把密码直接记在纸上,于是便想了一个方法. 题目描述 小明有四行数字,每行数字都有n[i](&l ...

  6. [NOIP2012] 提高组 洛谷P1079 Vigenère 密码

    题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密 码.Vigenère 密码的加密解密算法简单易用,且破译难度比较高,曾在美国南 ...

  7. 洛谷 P1914 小书童——密码【字符串+模拟】

    P1914 小书童——密码 题目背景 某蒟蒻迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你. 题目描述 蒟蒻虽然忘记密码,但他还记得密码是由一串字母组成.且 ...

  8. 洛谷——P1920 成功密码

    P1920 成功密码 题目描述 void_rank匪别人的书来看,原本想看杂志颓废的,结果不小心拿错拿成了被导师称作旁门左道的高中数学杂志<成功密码>.数学差得不行的void_rank实在 ...

  9. 洛谷P1481 魔族密码(LIS)

    题意 题目链接 给出一堆字符串,若一个串是另一个串的前缀 ,那么它们可以连接在一起 问最大的链接长度 Sol LIS沙比提其实是做完了才看出是LIS #include<cstdio> #i ...

  10. 洛谷P1079 Vigenère 密码

    题目链接:https://www.luogu.org/problemnew/show/P1079

随机推荐

  1. linux和unix中的IO模型总结

    高性能网络IO编程模型 一.I/O模型简介 在一个 linux 操作系统中,一般分为用户空间和内核空间. 用户空间一般就是我们进行应用程序编程的地方. 内核空间就是 linux 操作系统自己运行的一些 ...

  2. contextmanager装饰器

    虽然上下文管理器很好用,但定义一个符合协议的管理器对象其实挺麻烦的 得首先创建一个类,然后实现好几个魔法方法.为了简化这部分工作,python 提供了一个非常好用的工具:@contextmanager ...

  3. 02-Redis系列之-架构和高级API的使用

    通用部分 通用命令 # 1-keys # 打印出所有key keys * # 打印出所有以n开头的key keys n* # 打印出所有以nam开头,第四个字母是a到z的范围 keys nam[a-z ...

  4. chrome浏览器配置自定义搜索引擎

    chrome谷歌浏览器配置自定义搜索引擎 放弃百度搜索已经酝酿许久,现在搜索结果简直不忍直视.如果你想放弃使用百度搜索,并转向其他搜索引擎,头条搜索可能是一个不错的选择. 使用以下方式可以丝滑的使用其 ...

  5. 狂神说Git学习笔记整理

    Git 版本控制 ​ 在开发过程中,项目会进行版本迭代,新版本会取代旧版本,但是我们不希望直接删除旧版本,所以就需要一个版本管理器来管理新旧版本,不然就是手动控制... 多人开发必须使用版本控制!!! ...

  6. 【Azure App Services】多次操作App Service伸缩实例遇见限制操作记录

    问题描述 多次操作App Services,进行实例数的变化.达到限制后遇见报错: 错误的具体描述为: { "status": "Failed", " ...

  7. 【Azure 应用服务】"App Service"如何能判断自身网路没有问题?

    问题描述 当创建了一个App Service服务后,如何能判断服务自身网络链路路没有问题? 如果是用VM,通常用Ping可以判断.但是"网站应用App Service" 的Kudu ...

  8. 初识JavaScript逆向——以网易云音乐和招标网站为例

    前言:需要掌握一定的JavaScript基础,能看懂基础的JavaScript代码. 我们平常在浏览网站的时候会看到许多加密的参数,如果需要知道它的原始数据,就需要知道整个加密过程,所以本篇文章就来介 ...

  9. iview 日期组件 清空后验证没报红,需要在onChange 进行单独 validateField,因为空字符串校验没有触发

    // 日期组件的 onChange this.yourObj.xxxTime = item this.$refs.yourForm.validateField('xxxTime')

  10. Dreamweaver基础教程:学习CSS

    目录 CSS 简介 CSS 语法 Id 和 Class id 选择器 class 选择器 CSS 创建 外部样式表 内部样式表 内联样式 多重样式 多重样式优先级 背景(background) 背景颜 ...