AtCoder Beginner Contest 104

less than 1 minute read

日程

2018/08/05 21:00:00 ~ 2018/08/05 22:40:00
100min

コンテスト中に考えていたこと

A (-04:06 AC)

時系列: ABC -> ARC -> AGC
境界条件未満に注意しよう
変動可能性のあるコンテストに参加したが変動しないといったようなことは考えないでいいんだよな…?

B (04:06 - 20:11 WA)

2個目の条件境界注意しないとな… 
条件1&&2&&3のみ”AC”, ほとんどは”WA”っぽいな
これどういう順で適用するのが綺麗に書けるんだろう

C (20:11 - 99:39 WA)

総問題数は
愚直に全探索するとすべての問題について解くか否かで状態数は
必要な最低問題数が知りたいんだから,ある点数帯をコンプリートしない場合は点数の高い順のはず
これ点数が100点刻みな必要あるか…?
completeボーナスを含めた各得点帯一問を解く期待値のpriority queueを作って

  • 大きい順にp[i]個ずつの単位でGを超えなければ解く.
  • 超える場合は残っているもののうち単独での点数が最も高いものをp[i]未満使った場合と比較して少ない方を採用

って感じの貪欲っぽい感じで行けると思ったが…WA(期待値が同じ値になる場合とかの考慮ができてないからWAなんだろうな)
TLEはなんでだろう(->TLEはfor文が無限ループになってた)
同じ方針で解き直してみたら他にもバグを埋め込んでいたがそれを取り除いてもこの方針だとそもそもサンプルケースのような1問あたりの期待値が低いがそのゴールに到達するにはそっちを解いたほうがいい場合が考慮出来てないのでこれが限界ぽかった.

D

見てない

結果

performance: 161 (自己最低) rank: 1819位 abc104_rank

所感

うーむやばい笑(笑えない) abc104_submission B問題の後ろから2文字目という条件を誤実装していた…
WA出ているのに気づいたのがCを提出した終了30秒前というね…
そしてCも解けたわけではないという…
次からCの問題読み終わったらstatusの確認しよう(自戒).

現状

ついにratingが3桁になってしまった…
今まで気が向いた時に参加して特に解き直しとかしてなかったけど反省しよう.
これからはchokudaiさんのブログにあるように取り組んだけど解けなかった問題は復習してwriteupにまとめよう…
そしてお盆はC問題埋めてとりあえず水色復帰したい気持ち. abc104_rating

学び

今まで”Yes”/”No”とかで出力する時に

bool flag = true;
... 処理 ...
if (flag) cout << "Yes\n";
else cout << "No\n";

としていたけど解説にあるように

string ans = "Yes\n";
... 処理 ...
cout << ans;

にした方がコードがスッキリする.