bzoj1398 Vijos1382寻找主人 Necklace

来源:互联网 发布:mac 最新系统 编辑:程序博客网 时间:2024/04/29 14:39

题目

最小表示法,模板。

果然权限号板子多啊。

背过吧2333

#include<bits/stdc++.h>#define N 2000000using namespace std;char a[N+1],b[N+1];char c[N+1],d[N+1];int n,m1,m2;inline int get_M(char *tmp,int len){    int i=0,j=1,k=0;    while(i<len&&j<len&&k<len)    {        int cmp=tmp[(i+k)%len]-tmp[(j+k)%len];        if(cmp==0)k++;        else        {            if(cmp>0)i+=k+1;            else j+=k+1;            if(i==j)j++;            k=0;        }    }    return min(i,j);}int main(){    freopen("in.txt","r",stdin);    scanf("%s%s",a,b);    n=strlen(a);    m1=get_M(a,n);    m2=get_M(b,n);    for(int i=0;i<n;i++)c[i]=a[(i+m1)%n],d[i]=b[(i+m2)%n];    for(int i=0;i<n;i++)        if(c[i]!=d[i])return printf("No\n"),0;    printf("Yes\n");    for(int i=0;i<n;i++)printf("%c",c[i]);    printf("\n");    return 0;}