LoginSignup
1
1

More than 5 years have passed since last update.

AtCoder Regular Contest 039 A - A - B problem

Last updated at Posted at 2015-05-17

前提

問題について整理してみる

  • C++で解いた
  • ソースコード http://arc039.contest.atcoder.jp/submissions/405660
  • 以下のどれかで A - B が最大になる
    • Aのどこかを9に書き換える
    • Bの一番上の桁を1に書き換える
    • Bの一番上の桁以外の桁を0に書き換える

実装の概要

上のソースコードはテンプレやライブラリ部分が長いので整理

int main(int argc, const char * argv[]){
    // 入力はstringで受ける
    string a_str, b_str;
    cin >> a_str >> b_str;
    int a = stoi(a_str);
    int b = stoi(b_str);
    int ans = a - b;

    for(int i = 0; i < a_str.length(); i++){
        char c = a_str[i];
        // Aを一箇所9に書き換える
        a_str[i] = '9';
        // intに変えて引き算してmax
        int m = stoi(a_str) - stoi(b_str);
        ans = max(ans, m);
        // 元に戻す
        a_str[i] = c;
    }

    for(int i = 0; i < b_str.length(); i++){
        char c = b_str[i];

        // 一桁目の場合は1, それ以外は0に書き換える
        char cc = i ? '0' : '1';
        b_str[i] = cc;
        int m = stoi(a_str) - stoi(b_str);
        ans = max(ans, m);
        b_str[i] = c;
    }

    cout << ans << endl;
}

まとめ

  • stoiはC++11の機能なのでC++でSubmitしたらCEした スクリーンショット 2015-05-17 17.07.42.png
  • i桁目を取り出すとか、i桁目を書き換えるとかはライブラリ化してもいいかもしれない
  • 競プロ久々にやったらendl忘れそうになったりとかしていろいろやばかったので定期的にやろうと思う
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1