项链----------------------------------思维(最小表示法)

在这里插入图片描述

在这里插入图片描述
解析:
因为项链是环形,且还要输出字典序最小的。那么满足最小表示法的性质
所以我们对这两个串求最小表示法
比较这两个串的最小表示法是否相同即可

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+1000;
char a[N],b[N],s[N*3];
int n;
void calc(char a[])
{
    for(int i=0;i<2*n;i++)  s[i]=a[i%n];
    int i=0,j=1,k=0;
    while(i<n&&j<n)
    {
        for( k=0;k<n&&s[i+k]==s[j+k];k++);
        if(k==n) break;
        if(s[i+k]>s[j+k])
        {
            i+=k+1;
            if(i==j) i++;
        }
        else
        {
            j+=k+1;
            if(i==j) j++;
        }
        
    }
    k=min(i,j);
    for(int i=0;i<n;i++) a[i]=s[i+k];
}
int main()
{
    cin>>a>>b;
    n=strlen(a);
    calc(a);calc(b);
    if(strcmp(a,b)==0)
    {
        cout<<"Yes"<<endl;
        cout<<a<<endl;
    }
    else
    {
        cout<<"No"<<endl;
    }
}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读