BZOJ 1398 Vijos1382所有者ネックレス(最小表記)を見つけます

リンク:https://www.lydsy.com/JudgeOnline/problem.php?id=1398

 


 

 

トピック:

説明

2つのネックレス、彼らはネックレスかもしれないかどうかを判断するための表現を考えます。

入力

入力ファイル2つだけの行、0-9からなる文字列からなる各ラインは、(ネックレス等しい長さを確保する)ネックレスの表現を記述する。

出力

2つのネックレス均質可能であれば、出力「いいえ」、そうでない場合、最初の行の出力「はい」
ネックレス辞書式に最小の第2行の出力。ネックレスのL =長さはL <= 1000000、提供されます。

サンプル入力

2234342423
2423223434

サンプル出力

はい
2234342423
 
 

 
 
アイデア:
式最低限タイトル
 

 
コード:
#include <ビット/ STDC ++ H> 使用して名前空間STDを、
const int型 MAXN = 1E6 + 10 チャー[MAXNを]、B [MAXN]。int型 getmin(チャー * sで、int型のn){
     int型 I = 0、J = 1、K = 0 、T。
    一方(iは<N && J <N && K < N){ 
        たT = sの[(I + K)%のN] [(J + K)%の-s N];
        もし(!トン)のk ++ ;
        {
             もし(T> 0)、I + = K + 1 他の J + = K +

  

1 ;
            もし(I == j)はJ ++ ; 
            K = 0 
        } 
    } 
    リターン私は<jの?I:J。
} 

int型のmain(){ 
    scanf関数(" %sの" 、A)。
    scanf関数(" %sの" 、B)。
    INT LEN = STRLEN(A)。
    INT K1 = getmin(LEN)。
    INT K2 = getmin(B、LEN)。
    文字列 S1 = ""、S2 = "" ;
    以下のためのint型 I = 0; iがLEN <; iは++ ){ 
        S1 + = [(K1を+ I)%LEN]。
        S2 + = Bの[(K2 + I)%LEN]。
    } 
    であれば(S1 == S2){ 
        のprintf(" はいの\ n " ); 
        coutの << S1 << てendl; 
    } 
    のprintf(" ノー\ nを" );
    リターン 0 ; 
}

 

 
 
 
 
 

おすすめ

転載: www.cnblogs.com/whdsunny/p/11324538.html