Description

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

Input

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

Output

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

Sample Input

2234342423
2423223434

Sample Output

Yes
2234342423

Solution

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

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std ;
  4.  
  5. #define N 2000100
  6. #define inf 0x3f3f3f3f
  7.  
  8. char s1[ N ] , s2[ N ] ;
  9. int cur1 , cur2 ;
  10.  
  11. int main() {
  12. scanf( "%s%s" , s1 + , s2 + ) ;
  13. int n = strlen( s1 + ) ;
  14. for( int i = ; i <= n ; i ++ ) {
  15. s1[ i + n ] = s1[ i ] ;
  16. s2[ i + n ] = s2[ i ] ;
  17. }
  18. int i = , j = , k ;
  19. while( i <= n && j <= n ) {
  20. for( k = ; k <= n && s1[ i + k ] == s1[ j + k ] ; k ++ ) ;
  21. if( k == n ) break ;
  22. if( s1[ i + k ] > s1[ j + k ] ) {
  23. i = i + k + ;
  24. if( i == j ) i ++ ;
  25. } else {
  26. j = j + k + ;
  27. if( i == j ) j ++ ;
  28. }
  29. }
  30. cur1 = min( i , j ) ;
  31. i = , j = , k = ;
  32. while( i <= n && j <= n ) {
  33. for( k = ; k <= n && s2[ i + k ] == s2[ j + k ] ; k ++ ) ;
  34. if( k == n ) break ;
  35. if( s2[ i + k ] > s2[ j + k ] ) {
  36. i = i + k + ;
  37. if( i == j ) i ++ ;
  38. } else {
  39. j = j + k + ;
  40. if( i == j ) j ++ ;
  41. }
  42. }
  43. cur2 = min( i , j ) ;
  44. for( int c = ; c < n ; c ++ ) {
  45. if( s1[ cur1 + c ] != s2[ cur2 + c ] ) return puts( "No" ) , ;
  46. }
  47. puts( "Yes" ) ;
  48. for( int c = cur1 ; c <= cur1 + n - ; c ++ ) {
  49. putchar( s1[ c ] ) ;
  50. }
  51. puts("");
  52. return ;
  53. }

BZOJ1398: Vijos1382寻找主人 Necklace 字符串最小表示法的更多相关文章

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

    1398: Vijos1382寻找主人 Necklace Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 308  Solved: 129 Descrip ...

  2. 初涉最小表示法&&bzoj1398: Vijos1382寻找主人 Necklace

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

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

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

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

    传送门 解题思路 最小表示法.首先对于判断是不是循环同构的串,直接扫一遍用哈希判即可.然后要输出字典序最小的就要用到最小表示法,首先可以把串复制一遍,这样的话就可以把串变成静态操作.如果对于两个位置\ ...

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

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

  6. 【bzoj1398】Vijos1382寻找主人 Necklace

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

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

    链接:https://ac.nowcoder.com/acm/contest/328/A来源:牛客网 题目描述 Rabbit得到了一个字符串,她的好朋友xxx可以给这个字符串施加一次魔法. 魔法可以选 ...

  8. bzoj2176 Strange string(字符串最小表示法)

    Time Limit: 10 Sec  Memory Limit: 259 MB 给定一个字符串S = {S1, S2, S3 … Sn}, 如果在串SS中, 子串T(|T| = n)为所有长度为n的 ...

  9. [coj 1353 Guessing the Number]kmp,字符串最小表示法

    题意:给一个字符串,求它的最小子串,使得原串是通过它重复得到的字符串的一个子串. 思路:先求最小长度,最小循环长度可以利用kmp的next数组快速得到,求出长度后然后利用字符串最小表示法求循环节的最小 ...

随机推荐

  1. 在scrapy中使用mongodb管道

    pipelines.py import json from scrapy.conf import settings from pymongo import MongoClient class SunP ...

  2. VUE 使用之:nextTick

    <div class="app"> <div ref="msgDiv">{{msg}}</div> <div v-if ...

  3. (c++) int 转 string,char*,const char*和string的相互转换

    一.int 和string的相互转换 1 int 转化为 string c++ //char *itoa( int value, char *string,int radix); // 原型说明: / ...

  4. solr客户端的使用

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAP0AAACqCAYAAABmvkmzAAAACXBIWXMAAA7JAAAOygG3NjBLAABkG0

  5. 阻止提交按钮的默认 action

    使用 preventDefault() 函数来阻止对表单的提交. 示例代码如下: <html><head><script type="text/javascri ...

  6. spark shuffle原理

    1.spark中窄依赖的时候不需要shuffle,只有宽依赖的时候需要shuffle,mapreduce中map到reduce必须经过shuffle 2.spark中的shuffle fetch的时候 ...

  7. IP设置-内置服务器-外置服务器

    HBulider 中 运行 -> 设置web服务器 -> 内置服务器将 127.0.0.1 换为局域网的ip,可以在局域网内所有电脑,手机上浏览页面.但是只能浏览html,php asp等 ...

  8. 实体框架 Code First

    原文:https://msdn.microsoft.com/zh-cn/en-zn/data/jj591621

  9. angular前端框架

    总所周知,在前端开发中,大家用的比较多的框架就是angular,vue,react等,今天就为大家讲一下angular大家框架的原理及运用 1.本次所举的例子是以依赖require.js的, < ...

  10. C#:文件、byte[]、Stream相互转换

    一.byte[] 和 Stream /// <summary> /// byte[]转换成Stream /// </summary> /// <param name=&q ...