bzoj1398: Vijos1382寻找主人 Necklace
来源:互联网 发布:软件简介怎么写 编辑:程序博客网 时间:2024/04/29 10:41
最小表示法。
记录两个指针i,j,任何时刻不在相同位置。
当前匹配长度为k.
如果s[i+k]=s[j+k] k++;
如果s[i+k]>s[j+k] i+=k-1,k=0;
s[i+k]
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char s[2][1000010];int n,m;int main(){ scanf("%s%s",s[0],s[1]); n=strlen(s[0]); int i=0,j=1,k=0,x,y; while(i<n&&j<n&&k<n) { if(s[0][(i+k)%n]==s[0][(j+k)%n]) k++; else if(s[0][(i+k)%n]>s[0][(j+k)%n]) i+=k+1,k=0; else j+=k+1,k=0; if(i==j) i++; } x=min(i,j); i=0;j=1;k=0; while(i<n&&j<n&&k<n) { if(s[1][(i+k)%n]==s[1][(j+k)%n]) k++; else if(s[1][(i+k)%n]>s[1][(j+k)%n]) i+=k+1,k=0; else j+=k+1,k=0; if(i==j) i++; } y=min(i,j);bool ac=1; for(i=0;i<n;i++) { if(s[0][(x+i)%n]!=s[1][(y+i)%n]) { ac=0; break; } } if(!ac) puts("No"); else { puts("Yes"); for(int i=0;i<n;i++) printf("%c",s[0][(i+x)%n]); } return 0;}
阅读全文
0 0
- 【Vijos1382】【BZOJ1398】寻找主人 Necklace
- [BZOJ1398] Vijos1382寻找主人 Necklace
- 【bzoj1398】Vijos1382寻找主人 Necklace
- bzoj1398: Vijos1382寻找主人 Necklace
- bzoj1398: Vijos1382寻找主人 Necklace
- bzoj1398 Vijos1382寻找主人 Necklace
- 【bzoj1398】Vijos1382寻找主人 Necklace 最小表示法
- BZOJ 1398: Vijos1382寻找主人 Necklace【字符串最小表示
- bzoj 1398: Vijos1382寻找主人 Necklace (后缀自动机)
- BZOJ 1398: Vijos1382寻找主人 Necklace 字符串最小表示法
- BZOJ 1398: Vijos1382寻找主人 Necklace 最小表示法
- bzoj1398 寻找主人
- 【bzoj1398】【寻找主人】【最小表示法】
- 寻找好主人
- vijos-1382 寻找主人
- hustoj 2766: 寻找主人
- 主人
- necklace
- Android中关于项目中对Thread的管理(不是线程池)
- 用js写的简单计时器
- 传递数据的两种方法GET和POST
- hihoCoder #1094 : Lost in the City
- CVE-2010-2883字体文件SING表栈溢出
- bzoj1398: Vijos1382寻找主人 Necklace
- CodeFroces 822C.Hacker, pack your bags!(sorting+线性枚举)
- 浅谈javaweb三大框架和MVC设计模式
- leetcode 546. Remove Boxes
- 用jupyter notebook打开.ipynb文件
- swift 懒加载
- linux与window间soket通信
- storm基础知识
- JSP内置对象request的方法的使用