AtCoder Beginner Contest 121 感想
AtCoder Beginner Contest 121 に参加しました。
順位は悲惨なので書きたくないです。
A - White Cells
atcoder.jp
h行w列を塗りつぶすと、重複して塗られるマスが h*w 個できます。
よって答えは H*W - (h*W+w*H-h*w) です。
B - Can you solve this?
atcoder.jp
やるだけの問題でした。
C - Energy Drink Collector
まず、コードを貼ります。
void solve () { long n = nextLong(), m = nextLong(); TreeMap<Long, Long> map = new TreeMap<>(); for (int i=0; i<n; i++) { map.put(nextLong(), nextLong()); } long ans = 0L; for (Map.Entry<Long, Long> e: map.entrySet()) { if (m <= e.getValue()) { ans += e.getKey() * m; break; } else { m -= e.getValue(); ans += e.getKey() * e.getValue(); } } out.println(ans); }
最初提出したときには絶対にACできると思っていました。しかし、何度提出してもWA、WA。
勘違いしました。
このコードだと、例えば 2,10 の直後に 2,1 が来たとき、本来であれば 2,11 と Map に格納しなければいけないところを、2,10 のまま変更されません。致命的ミス。
あれだけ使い勝手が良いと言っていた map.put(a, map.getOrDefault(a,0)+b) のまたとない出番でしょう。何やってるの。
なぜ解けなかったか?
入力例に「A が重複するパターン」がなかったので気が付けなかった……と言い訳したいです。
すべては、入力例と出力例から答えを帰納しようとする自分の悪い癖のせいです。
これから何をすべきか?
入力例と出力例から解答コードを作らない。
少なくとも、最初の提出だけは入力例と出力例を見ずに提出する、など。
総括
特になし、反省せよ。