リンク:https://ac.nowcoder.com/acm/contest/887/A
出典:牛オフネットワーク
タイトル説明
それはその環状回転の中で最小の辞書式順序付けを持っている場合、文字列は完璧です。
例: "0101"は、( "0101"、 "1010"、 "0101"、 "1010")の中で最小の文字列であるように完全です。
01文字列を考えると、あなたは、少なくとも部分に分割する必要があり、すべての部品は完璧です。
例: "0101"は、( "0101"、 "1010"、 "0101"、 "1010")の中で最小の文字列であるように完全です。
01文字列を考えると、あなたは、少なくとも部分に分割する必要があり、すべての部品は完璧です。
説明を入力します。
入力の最初の行は、テストケースの数、得られるT(T≤300)T \(T \当量300)T (T ≤ 3 0 0 )。テストケースは以下の通り。各テストケースのために、唯一の行は、一つの非空の01文字列を含みます。文字列の長さは200を超えないようにしています。
出力説明:
各テストケースのために、出力1つの文字列は、空白で区切られました。
例1
輸出
コピー0 発明の属する技術分野 001 0 111 01111 0
#include <iostreamの> する#include <cstdioを> する#include <アルゴリズム> の#include <CStringの> する#include <cmath> の#include <cstdlib> の#include <キュー> の#include <スタック> の#include <ベクトル> 使用して 名前空間STD。 #define MAXN 100010 の#defineっ長い長いint型トン。 文字列sの。ブール minma(列X) { int型 LEN = x.size()。 以下のための(int型 I = 1 ; 私はLEN <; I ++ ) のための(INT J = 0 ; J <LEN; J ++ ) { 場合(X [J] <X [(J + I)%LEN]) ブレーク。 それ以外の 場合(X [J]> X [(J + I)%LEN]) を返す 偽。 } を返す 真。 } int型のmain() { CIN >> T。 一方、(t-- ) { CIN >> S。 int型のlen =s.size(); int型私= 0 ; 一方 <(iはLEN)を { ため(INT - ; J、I、J = LEN> 0 ; j-- ) { 場合(minma(s.substr(I、J))) { COUT << s.substr(I、J ); 私は + = J; もし(私は< LEN) のprintf(" " ); 破ります; } } } のprintf(" \ nを" ); } 戻り 0 。 }