WARush

SRMの結果とか、解けた問題のコードを書いていきます

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;
}