Codeforces #177 Div2 C "Polo the Penguin and Strings"
問題
http://codeforces.com/contest/289/problem/C
訳
下記のような文字列を見つけたい。
1. その文字列はN個の小文字のアルファベットで構成されており、 文字の種類がちょうどK個あった。 2. 隣り合う文字は同じ文字ではなかった。 3. ポイント1.2を満たしている文字列のうち、辞書順で一番最後のものだった。
これら3つのポイントを満たす文字列を表示せよ。
無ければ-1を出力せよ。
制約
1 <= N <= 10^6
1 <= K <= 26
考えた事
ん?最初は出来る限りabababab...ってやって、
それからcdefgh... ってやって終わればいいんじゃないか?
ただし、K=1の時だけababa..って出来ないから注意だな
ソースコード
int main() { int N, K; cin >> N >> K; if( N < K ){ cout << -1 << endl; return 0; } if( K == 1 ){ if( N != 1 ){ cout << -1 << endl; }else{ cout << 'a' << endl; } return 0; } ostringstream oss; int abzone = N - (K - 2); // abab..とできる最後のindex+1 for( int i = 0; i < abzone; i++ ){ oss << (i % 2 ? 'b' : 'a' ); } char c = 'c'; for( int i = abzone; i < N; i++, c++ ){ oss << c; } oss << endl; cout << oss.str() << endl; }