BZOJ1398: Vijos1382寻找主人 Necklace 字符串最小表示法
Description
给定两个项链的表示,判断他们是否可能是一条项链。
Input
输入文件只有两行,每行一个由0至9组成的字符串,描述一个项链的表示(保证项链的长度是相等的)。
Output
Sample Input
2423223434
Sample Output
2234342423
Solution
最小表示法板子题...随便跑一跑就行
- #include <bits/stdc++.h>
- using namespace std ;
- #define N 2000100
- #define inf 0x3f3f3f3f
- char s1[ N ] , s2[ N ] ;
- int cur1 , cur2 ;
- int main() {
- scanf( "%s%s" , s1 + , s2 + ) ;
- int n = strlen( s1 + ) ;
- for( int i = ; i <= n ; i ++ ) {
- s1[ i + n ] = s1[ i ] ;
- s2[ i + n ] = s2[ i ] ;
- }
- int i = , j = , k ;
- while( i <= n && j <= n ) {
- for( k = ; k <= n && s1[ i + k ] == s1[ j + k ] ; k ++ ) ;
- if( k == n ) break ;
- if( s1[ i + k ] > s1[ j + k ] ) {
- i = i + k + ;
- if( i == j ) i ++ ;
- } else {
- j = j + k + ;
- if( i == j ) j ++ ;
- }
- }
- cur1 = min( i , j ) ;
- i = , j = , k = ;
- while( i <= n && j <= n ) {
- for( k = ; k <= n && s2[ i + k ] == s2[ j + k ] ; k ++ ) ;
- if( k == n ) break ;
- if( s2[ i + k ] > s2[ j + k ] ) {
- i = i + k + ;
- if( i == j ) i ++ ;
- } else {
- j = j + k + ;
- if( i == j ) j ++ ;
- }
- }
- cur2 = min( i , j ) ;
- for( int c = ; c < n ; c ++ ) {
- if( s1[ cur1 + c ] != s2[ cur2 + c ] ) return puts( "No" ) , ;
- }
- puts( "Yes" ) ;
- for( int c = cur1 ; c <= cur1 + n - ; c ++ ) {
- putchar( s1[ c ] ) ;
- }
- puts("");
- return ;
- }
BZOJ1398: Vijos1382寻找主人 Necklace 字符串最小表示法的更多相关文章
- 【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组成的字符串,描述一个项链的表示(保证项链的长度是相等的) ...
- [bzoj 1398] Vijos1382寻找主人 Necklace 解题报告(最小表示法)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1398 题目: Description 给定两个项链的表示,判断他们是否可能是一条项链. ...
- BZOJ 1398: Vijos1382寻找主人 Necklace(最小表示法)
传送门 解题思路 最小表示法.首先对于判断是不是循环同构的串,直接扫一遍用哈希判即可.然后要输出字典序最小的就要用到最小表示法,首先可以把串复制一遍,这样的话就可以把串变成静态操作.如果对于两个位置\ ...
- bzoj 1398: 寻找主人 AC自动机+最小表示法
题目大意: 给定两个序列判断是否循环同构,若循环同构则输出最小表示 题解: 因为没有样例输入输出,一开始没看到要求输出最小表示 Wa一大页. 但不得不说bzoj还是挺高效的: 赞一个 XD.jpg 判 ...
- 【bzoj1398】Vijos1382寻找主人 Necklace
*题目描述: 给定两个项链的表示,判断他们是否可能是一条项链. *输入: 输入文件只有两行,每行一个由0至9组成的字符串,描述一个项链的表示(保证项链的长度是相等的). *输出: 如果两条项链不可能同 ...
- 牛客练习赛36 A Rabbit的字符串(字符串最小表示法)
链接:https://ac.nowcoder.com/acm/contest/328/A来源:牛客网 题目描述 Rabbit得到了一个字符串,她的好朋友xxx可以给这个字符串施加一次魔法. 魔法可以选 ...
- bzoj2176 Strange string(字符串最小表示法)
Time Limit: 10 Sec Memory Limit: 259 MB 给定一个字符串S = {S1, S2, S3 … Sn}, 如果在串SS中, 子串T(|T| = n)为所有长度为n的 ...
- [coj 1353 Guessing the Number]kmp,字符串最小表示法
题意:给一个字符串,求它的最小子串,使得原串是通过它重复得到的字符串的一个子串. 思路:先求最小长度,最小循环长度可以利用kmp的next数组快速得到,求出长度后然后利用字符串最小表示法求循环节的最小 ...
随机推荐
- 在scrapy中使用mongodb管道
pipelines.py import json from scrapy.conf import settings from pymongo import MongoClient class SunP ...
- VUE 使用之:nextTick
<div class="app"> <div ref="msgDiv">{{msg}}</div> <div v-if ...
- (c++) int 转 string,char*,const char*和string的相互转换
一.int 和string的相互转换 1 int 转化为 string c++ //char *itoa( int value, char *string,int radix); // 原型说明: / ...
- solr客户端的使用
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAP0AAACqCAYAAABmvkmzAAAACXBIWXMAAA7JAAAOygG3NjBLAABkG0
- 阻止提交按钮的默认 action
使用 preventDefault() 函数来阻止对表单的提交. 示例代码如下: <html><head><script type="text/javascri ...
- spark shuffle原理
1.spark中窄依赖的时候不需要shuffle,只有宽依赖的时候需要shuffle,mapreduce中map到reduce必须经过shuffle 2.spark中的shuffle fetch的时候 ...
- IP设置-内置服务器-外置服务器
HBulider 中 运行 -> 设置web服务器 -> 内置服务器将 127.0.0.1 换为局域网的ip,可以在局域网内所有电脑,手机上浏览页面.但是只能浏览html,php asp等 ...
- 实体框架 Code First
原文:https://msdn.microsoft.com/zh-cn/en-zn/data/jj591621
- angular前端框架
总所周知,在前端开发中,大家用的比较多的框架就是angular,vue,react等,今天就为大家讲一下angular大家框架的原理及运用 1.本次所举的例子是以依赖require.js的, < ...
- C#:文件、byte[]、Stream相互转换
一.byte[] 和 Stream /// <summary> /// byte[]转换成Stream /// </summary> /// <param name=&q ...