BZOJ 1398: Vijos1382寻找主人 Necklace(最小表示法)
生活随笔
收集整理的這篇文章主要介紹了
BZOJ 1398: Vijos1382寻找主人 Necklace(最小表示法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
給定兩個項鏈的表示,判斷他們是否可能是一條項鏈。
Input
輸入文件只有兩行,每行一個由0至9組成的字符串,描述一個項鏈的表示(保證項鏈的長度是相等的)。
Output
如果兩條項鏈不可能同構,那么輸出’No’,否則的話,第一行輸出一個’Yes’ 第二行輸出該項鏈的字典序最小的表示。 設L = 項鏈長度,L <= 1000000。Sample Input
22343424232423223434
Sample Output
Yes2234342423
HINT
Source
/// /// _ooOoo_ /// o8888888o /// 88" . "88 /// (| -_- |) /// O\ = /O /// ____/`---'\____ /// .' \\| |// `. /// / \\||| : |||// \ /// / _||||| -:- |||||- \ /// | | \\\ - /// | | /// | \_| ''\---/'' | | /// \ .-\__ `-` ___/-. / /// ___`. .' /--.--\ `. . __ /// ."" '< `.___\_<|>_/___.' >'"". /// | | : `- \`.;`\ _ /`;.`/ - ` : | | /// \ \ `-. \_ __\ /__ _/ .-` / / /// ======`-.____`-.___\_____/___.-`____.-'====== /// `=---=' /// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /// Buddha Bless, No Bug ! /// #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <cstdlib> #include <queue> #include <stack> #include <vector> using namespace std; #define MAXN 100010 #define ll long longstring a, b;int minma(string x)///最小循環同構 {int len = x.size();int i = 0, j = 1, k = 0;///初始化i = 0, j = 1while(i < len && j < len && k < len)///直接向后掃描 {int t = x[(i + k) % len] - x[(j + k) % len];///比較 x[i] 與 x[j] 兩個循環同構串if(t == 0)///如果掃描了 n 個字符仍相等,說明 x 只有1中字符構成,任意x[i]都是它的最小表示k++;else///如果在 i+k 與 j+k 處發現不相等 {if(t > 0)///如果 x[i+k] > x[j+k],那么x[i+1], x[i+2], ...,x[i+k]也都不是 x 的最小表示,這時就直接跳過這些位置i += k + 1;else///如果 x[i+k] < x[j+k],那么x[j+1], x[j+2], ...,x[j+k]也都不是 x 的最小表示,這時就直接跳過這些位置 j += k + 1;if(i == j)///如果兩指針相等,就讓其中一個往后移,便于查找最小的循環同構j++;k = 0;}}return i < j ? i : j;///返回最小循環同構的位置 }int main() {cin>>a>>b;int lena = a.size(), lenb = b.size();if(lena != lenb)printf("No\n");else{int num_a = minma(a);int num_b = minma(b);for(int k = 0; k < lena; k++){if(a[(num_a + k) % lena] != b[(num_b + k) % lena]){printf("No\n");return 0;}}printf("Yes\n");for(int i = 0; i< lena; i++)cout<<a[(i + num_a) % lena];cout<<'\n';}return 0; }?
轉載于:https://www.cnblogs.com/RootVount/p/11352127.html
總結
以上是生活随笔為你收集整理的BZOJ 1398: Vijos1382寻找主人 Necklace(最小表示法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SDNU 1263.C语言程序设计教程(
- 下一篇: 【08月14日】A股ROE最高排名