cplusplusonly's memo

Atcoder: https://atcoder.jp/users/cplusplusonly

AtCoder ABC 131 参戦記

AtCoder の ABC 131 に参戦しました。

atcoder.jp


結果は 40 分弱で ABCDE まで解けてパフォーマンスは 1837。青色復帰となりました。
酒が結構 *1 入っている状態でしたが、それほど致命的なミスはなくまずまずな結果でした。
まあたいていのミスはエディタさん *2 がすぐに赤線引いてくれるからではありますが...

f:id:y_r:20190622232322p:plain

感想

A 問題

瞬殺

B 問題

ちょい実装多め。

  •  l < 0 : 合計値 - l
  •  n + l - 1 < 0 : 合計値 - (n + l - 1)
  • それ以外 : 0 が含まれるので合計値が答え

なのだが手元で実装ミスを繰り返して時間消費した...実は素直に 2 重ループ書いたほうが手早かったかも...

C 問題
  •  count(n, x, y) n 以下の整数のうち  x でも  y でも割り切れない数とすると、答えは  cout(b, c, d) - count(a - 1, c, d)
  • count(n, x, y) の求め方は  n - (n/x + n/y - n/gcd(x,y))

だが、ここでも手元での WA を取るのに時間がかかる

D 問題

B でソート一発。あとは順に A を足していって B を超えないかを見るだけ。B 問題、C 問題より早くできた。

E 問題
  • 明らかに最大数は  1 を中心として残りの  n - 1 個に辺を張ったとき
  • あとは 1 本辺を足すたびに 1 ずつ減る

のでこれを構築。

F 問題
  • (正) ちょうど 3 箇所に点が存在するような整数を選び残りの 1 箇所に点を追加
  • (誤) ちょうど 3 箇所に点が存在するような整数を選び <それらの点を消して> 残りの 1 箇所に点を追加

の読み間違いをやらかしたまま残り 2 分で実装完。手元で動かしてサンプルを見ると答えが最初の整数の数以上だったので ??? となり、もう一度問題文を読み直して読み間違いに気が付いて魂が消えたままタイムアップ...

*1:ビール 1 杯と日本酒 1.5 合

*2:Visual Studio