Description

给定两个项链的表示,判断他们是否可能是一条项链。

Input

输入文件只有两行,每行一个由0至9组成的字符串,描述一个项链的表示(保证项链的长度是相等的)。

Output

如果两条项链不可能同构,那么输出’No’,否则的话,第一行输出一个’Yes’
第二行输出该项链的字典序最小的表示。 设L = 项链长度,L <= 1000000。

Sample Input

2234342423
2423223434

Sample Output

Yes
2234342423

Solution

最小表示法板子题...随便跑一跑就行

#include <bits/stdc++.h>using namespace std ;#define N 2000100
#define inf 0x3f3f3f3fchar s1[ N ] , s2[ N ] ;
int cur1 , cur2 ;int main() {scanf( "%s%s" , s1 + 1 , s2 + 1 ) ;int n = strlen( s1 + 1 ) ;for( int i = 1 ; i <= n ; i ++ ) {s1[ i + n ] = s1[ i ] ;s2[ i + n ] = s2[ i ] ;}int i = 1 , j = 2 , k ;while( i <= n && j <= n ) {for( k = 0 ; k <= n && s1[ i + k ] == s1[ j + k ] ; k ++ ) ;if( k == n ) break ;if( s1[ i + k ] > s1[ j + k ] ) {i = i + k + 1 ;if( i == j ) i ++ ;} else {j = j + k + 1 ;if( i == j ) j ++ ;}}cur1 = min( i , j ) ;i = 1 , j = 2 , k = 0 ;while( i <= n && j <= n ) {for( k = 0 ; k <= n && s2[ i + k ] == s2[ j + k ] ; k ++ ) ;if( k == n ) break ;if( s2[ i + k ] > s2[ j + k ] ) {i = i + k + 1 ;if( i == j ) i ++ ;} else {j = j + k + 1 ;if( i == j ) j ++ ;}}cur2 = min( i , j ) ;for( int c = 0 ; c < n ; c ++ ) {if( s1[ cur1 + c ] != s2[ cur2 + c ] ) return puts( "No" ) , 0 ;}puts( "Yes" ) ;for( int c = cur1 ; c <= cur1 + n - 1 ; c ++ ) {putchar( s1[ c ] ) ;}puts("");return 0 ;
} 

转载于:https://www.cnblogs.com/henry-1202/p/BZOJ1398.html

BZOJ1398: Vijos1382寻找主人 Necklace 字符串最小表示法相关推荐

  1. BZOJ 1398: Vijos1382寻找主人 Necklace(最小表示法)

    Description 给定两个项链的表示,判断他们是否可能是一条项链. Input 输入文件只有两行,每行一个由0至9组成的字符串,描述一个项链的表示(保证项链的长度是相等的). Output 如果 ...

  2. [BZOJ1398] Vijos1382寻找主人 Necklace

    传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1398 题目大意 求最小表示法 题解 constmaxn=1000010; varx,ans1 ...

  3. [bzoj 1398] Vijos1382寻找主人 Necklace 解题报告(最小表示法)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1398 题目: Description 给定两个项链的表示,判断他们是否可能是一条项链. ...

  4. bzoj 1398: 寻找主人 AC自动机+最小表示法

    题目大意: 给定两个序列判断是否循环同构,若循环同构则输出最小表示 题解: 因为没有样例输入输出,一开始没看到要求输出最小表示 Wa一大页. 但不得不说bzoj还是挺高效的: 赞一个 XD.jpg 判 ...

  5. 【Vijos1382】【BZOJ1398】寻找主人 Necklace

    Description 给定两个项链的表示,判断他们是否可能是一条项链. Input 输入文件只有两行,每行一个由0至9组成的字符串,描述一个项链的表示(保证项链的长度是相等的). Output 如果 ...

  6. zcmu1550(字符串最小表示法)

    1550: AA Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 125  Solved: 35 [Submit][Status][Web Board] ...

  7. 牛客练习赛36 Rabbit的字符串(最小表示法)

    题目链接 题目描述 Rabbit得到了一个字符串,她的好朋友xxx可以给这个字符串施加一次魔法. 魔法可以选择字符串的任一位置,并将该位置后面的所有字符水平拼接到串首. 例如:对于字符串abcde,可 ...

  8. 新生赛3 1003 字符串最小表示法题目

    Problem C Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  9. HDU - 3374 String Problem(最小表示法+最大表示法+KMP的next数组)

    题目链接:点击查看 题目大意:给出一个字符串,现在问字符串不断向左循环所能形成的n个字符串中,字典序最小和最大的字符串的编号为多少,分别有多少个 题目分析:字符串最小表示法的模板题,证明和模板都是看大 ...

最新文章

  1. oracle创建表分区表,oracle创建分区表
  2. 一种新的在线学习的方法:能够克服单人多任务学习的困难!
  3. oracle 11g 11.2.0.1 设置HuagePage导致TRC 变大 变多
  4. springboot多数据源使用EntityManager
  5. PyTorch实战福利从入门到精通之三——autograd
  6. Java语言的基础知识6
  7. 《程序设计技术》第七章例程
  8. mysql有没有mssql执行计划_MSSQL优化执行计划
  9. vi编辑器使用技巧篇1
  10. Windows自动关机设置
  11. ai面试的优缺点_面试看脸?颜值低会不会被AI刷掉......
  12. 图像坐标球面投影_C/C++ 图像处理(7)------图像の球面投影算法
  13. 568A和568B的线序
  14. 微信小程序之分包加载
  15. 计算机电子表格考点,计算机一级考试历年常见考点总结:Excel电子表格
  16. CVPR2021提出的一些新数据集汇总
  17. 全网最通俗易懂的「插屏广告」接入方法
  18. [笔记分享] [Display] MIPI屏调试及举例
  19. PHP网站从服务器下载文件到本地
  20. Python3网络爬虫实战-38、动态渲染页面抓取:Splash的使用

热门文章

  1. Linux 批量修改文件名
  2. Spring IOC容器分析(1) -- BeanFactory
  3. #翻译# 关于 Java 性能方面的 9 个谬论
  4. node.js之stream模块
  5. 微软发布紧急更新:修复Flash高危漏洞
  6. arguments小结
  7. 1.1 Spring的整体架构--Spring源码深度解析
  8. Introduce Intelligence to Your Security Operations
  9. 7月13日微软MVP社区夏日巡讲北京站活动现场图集
  10. Spring3 集成 Hibernate3