• BZOJ 1398 Vijos1382寻找主人 Necklace (最小表示法)


    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1398


    题目:

    Description

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

    Input

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

    Output

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

    Sample Input

    2234342423
    2423223434

    Sample Output

    Yes
    2234342423
     
     

     
     
    思路:
    最小表达法裸题
     

     
    代码:
    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn=1e6+10;
    char a[maxn],b[maxn];
    
    int getmin(char *s,int n){
        int i=0,j=1,k=0,t;
        while(i<n && j<n && k<n){
            t=s[(i+k)%n]-s[(j+k)%n];
            if(!t) k++;
            else{
                if(t>0) i+=k+1;
                else j+=k+1;
                if(i==j) j++;
                k=0;
            }
        }
        return i<j?i:j;
    }
    
    int main(){
        scanf("%s",a);
        scanf("%s",b);
        int len=strlen(a);
        int k1=getmin(a,len);
        int k2=getmin(b,len);
        string s1="",s2="";
        for(int i=0;i<len;i++){
            s1+=a[(k1+i)%len];
            s2+=b[(k2+i)%len];
        }
        if(s1==s2){
            printf("Yes
    ");
            cout<<s1<<endl;
        }
        else printf("No
    ");
        return 0;
    } 
     
     
     
     
     
  • 相关阅读:
    TP之Model(select(),add())
    TP之空操作及View模块
    ThinkPHP之初识
    smarty引擎之练习
    领先环境HTML
    php流程
    分页
    弹窗
    邮箱项目
    TP框架修改操作
  • 原文地址:https://www.cnblogs.com/whdsunny/p/11324538.html
Copyright © 2020-2023  润新知