読者です 読者をやめる 読者になる 読者になる

へなちょここーだー

プログラミング初心者がtopcoderなどの競技プログラミングに挑戦。勉強したアルゴリズムなどを書いていきます。現在topcoder緑でcodeforces青。どちらもDiv1昇格を目指しています。

UnKoder #04

GW最高。ってな訳でプロコン連日参加中。今回はUnKoder#04に参加して、19/36位でした。

Islands in Circle

とってもシンプルなコードになりました。

int main() {
    int N, K, result;
    cin >> N >> K;
    if(N % 2 == 1){
        result = min(K + 1, N);
    }else{
        result = min(K + 1, N / 2);
    }
    cout << result << endl;
    return 0;
}

ただ、ここまでたどり着くのに一苦労。探索をして解きました。するとSegmentation Errorに。どうすればいいんだーと頭を抱えながら図を書いて規則性を探していると実は凄く分かりやすい規則性があることを発見してこうなりました。

Book Stacks

これはすぐに解けました。冊数の一番少ない山をまずは崩し、そこに読み終わった本を山積みしていくと操作回数が最小になります。

int main() {
    int N;
    cin >> N;
    int A[N], minA=100, total = 0;
    for(int i = 0; i < N; i++){
        cin >> A[i];
        minA = min(minA, A[i]);
        total +=  2 * A[i] - 1;
    }
    total += minA - 1;
    cout << total << endl;
    return 0;
}

この2問しか解けませんでした。後の2問にも挑戦してみたのですが、無理でした。