bzoj 1398: 寻找主人 AC自动机+最小表示法
题目大意:
给定两个序列判断是否循环同构,若循环同构则输出最小表示
题解:
因为没有样例输入输出,一开始没看到要求输出最小表示
Wa一大页.
但不得不说bzoj还是挺高效的:
赞一个 XD.jpg
判断是否循环同构用kmp即可,可惜本人并不会kmp,用的AC自动机.
然后去学了一发求最小表示法方法...这。。。貌似是模板题..
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
x=0;char ch;bool flag = false;
while(ch=getchar(),ch<'!');if(ch == '-') ch = getchar(),flag = true;
while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
const int maxn = 1100010;
int ch[maxn][11],fail[maxn];
bool danger[maxn];
int nodecnt = 0;
char s[maxn<<1];
inline void insert(){
int nw = 0,len = strlen(s);
for(int i=0,c;i<len;++i){
c = s[i] - '0';
if(ch[nw][c] == 0) ch[nw][c] = ++ nodecnt;
nw = ch[nw][c];
}danger[nw] = true;
}
int q[maxn],l,r;
inline void build(){
l = 0;r = -1;fail[0] = 0;
for(int i=0;i<=9;++i){
if(ch[0][i]){
fail[ch[0][i]] = 0;
q[++r] = ch[0][i];
}
}
while(l <= r){
int u = q[l++];
for(int i=0;i<=9;++i){
int t = ch[fail[u]][i];
if(ch[u][i] == 0) ch[u][i] = t;
else{
danger[ch[u][i]] |= danger[t];
fail[ch[u][i]] = t;
q[++r] = ch[u][i];
}
}
}
}
inline bool find(){
int nw = 0,len = strlen(s);
for(int i=0;i<len;++i){
nw = ch[nw][s[i] - '0'];
if(danger[nw]) return true;
}return false;
}
inline int find2(){
int i=0,j=1,k=0,len = strlen(s);
while(i < len && j < len){
for(k = 0;s[(i+k)%len] == s[(j+k)%len] && k < len;++k);
if(k == len) return i;
if(s[(i+k)%len] > s[(j+k)%len]) i = max(i+k+1,j+1);
else j = max(j+k+1,i+1);
}
if(i < len) return i;
else return j;
}
int main(){
scanf("%s",s);insert();build();
scanf("%s",s);int n = strlen(s);
for(int i=0;i<n;++i) s[n+i] = s[i];
if(find()){
puts("Yes");
s[n] = 0;
int i = find2();
for(int j=0;j<n;++j) putchar(s[(i+j)%n]);
}else puts("No");
getchar();getchar();
return 0;
}
bzoj 1398: 寻找主人 AC自动机+最小表示法的更多相关文章
- 【BZOJ 1398】 1398: Vijos1382寻找主人 Necklace (最小表示法)
1398: Vijos1382寻找主人 Necklace Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 308 Solved: 129 Descrip ...
- BZOJ1398: Vijos1382寻找主人 Necklace 字符串最小表示法
Description 给定两个项链的表示,判断他们是否可能是一条项链. Input 输入文件只有两行,每行一个由0至9组成的字符串,描述一个项链的表示(保证项链的长度是相等的). Output 如果 ...
- bzoj 3881: [Coci2015]Divljak AC自动机
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=3881 题解: 这道题我想出了三种做法,不过只有最后一种能过. 第一种: 首先我们把所有的 ...
- BZOJ 3172: [Tjoi2013]单词 [AC自动机 Fail树]
3172: [Tjoi2013]单词 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 3198 Solved: 1532[Submit][Status ...
- bzoj 3172 后缀数组|AC自动机
后缀数组或者AC自动机都可以,模板题. /************************************************************** Problem: 3172 Us ...
- BZOJ 3172 单词(ac自动机)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3172 题意:给出n个单词.输出每个单词在所有单词中一共出现多少次? 思路:首先将所有单词 ...
- BZOJ 1559: [JSOI2009]密码( AC自动机 + 状压dp )
建AC自动机后, dp(x, y, s)表示当前长度为x, 在结点y, 包括的串的状态为s的方案数, 转移就在自动机上走就行了. 对于输出方案, 必定是由给出的串组成(因为<=42), 所以直接 ...
- BZOJ 3881: [Coci2015]Divljak [AC自动机 树链的并]
3881: [Coci2015]Divljak 题意:添加新文本串,询问某个模式串在多少种文本串里出现过 模式串建AC自动机,考虑添加一个文本串,走到的节点记录下来求树链的并 方法是按dfs序排序去重 ...
- BZOJ.2938.[POI2000]病毒(AC自动机)
题目链接 \(Description\) 给n个模式串,问是否存在长度无限的主串,使得任何一个模式串都没有在主串中出现. \(Solution\) 先建AC自动机. 假设我们有了一个无限长的安全代码, ...
随机推荐
- EasyNVR无插件直播服务器软件接口调用返回“Unauthorized”最简单的处理方式
背景需求 对于EasyNVR的受众群体十分的广泛,不仅仅有将EasyNVR作为视频直播平台直接使用的,更多的是使用EasyNVR的对应功能集成到自身系统.对于前者,只需要将软件的使用功能搞清楚即可,对 ...
- Spring MVC的视图解析器
一.视图解析器简介 在Spring MVC中,当Controller将请求处理结果放入到ModelAndView中以后,DispatcherServlet会根据ModelAndView选择合适的视图进 ...
- Android系统移植与调试之------->如何修改Android自带的apk出现一圈圈类似鸡蛋的花纹
最近被一个问题烦恼到了,就是android4.1系统自带的Email.文件管理器.信息等apk都出现同一个问题,就是现实在平板上的时候会出现一圈圈类似鸡蛋的花纹. 我想了两种方法来解决,第一种方法没有 ...
- (转)linux访问windows共享文件夹的两种方法
有时需要在linux下访问window的共享文件,可以使用mount挂载或使用samba连接. 1,mount挂载 $ mkdir windows 将共享文件夹挂载到windows文件夹: mount ...
- QT5的exe的发布
直接release的exe文件需要很多dll关联,一个一个找又太麻烦. 其实QT5带有一个 windeployqt 工具 Qt Widgets Application可执行程序发布方式 首先用 QtC ...
- ADT和Android SDK的安装
本文主要涉及Android开发环境搭建时的Eclipse.ADT及Android SDK的安装方法,还有遇到的两个问题及其解决办法.其中,ADT的安装介绍了在线和离线安装两种方式. 1.安装ecli ...
- 深度问答之提取语料,导入了yml模块
根据目录下的yml文件循环创建同名文件夹,并从yml文件读取问答并给每个文件夹写入question和answer文件 #!/usr/bin/env python # coding:utf8 # aut ...
- rest-client restclient get post写法
get url = "https://api.weixin.qq.com/sns/jscode2session" data = { appid: "××××", ...
- 利用CocoaPods管理本地工程和发布开源框架
发布自己三方框架 发布云端库 1.创建spec pod spec create xxx 2.编辑spec s.name:名称,pod search 搜索的关键词,注意这里一定要和.podspec的名称 ...
- 写出pythonic的python代码
http://www.cnblogs.com/dadadechengzi/p/6226071.html 1,列表推导(没当要对序列中的内容进行循环处理时,就应该尝试使用列表推倒) 在python中编写 ...