Edited at

AtCoder Regular Contest 039 A - A - B problem

More than 3 years have passed since last update.


前提


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


  • 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忘れそうになったりとかしていろいろやばかったので定期的にやろうと思う