れとろのメモ置場

とあるSEのメモ置場

パナソニックプログラミングコンテスト2021(AtCoder Beginner Contest 231)

パナソニックプログラミングコンテスト2021(AtCoder Beginner Contest 231)に参加しました。

結果

A,B,C,D問題の4問正解でパフォーマンスが1076でした。 D問題がいつもより簡単だった気がする。

A - Water Pressure

入力を100で割ったものを出力する。言語によっては割る数が整数だと計算結果から小数点以下が切り捨てられる場合があるので注意する。

B - Election

候補者名毎に投票数をカウントして、投票数が最大の候補者名を出力する。
最初はmapを使って候補者名をキーに投票数を数えて、投票数最大の候補者の名前を出力していたけど、なぜかWAになった...
ぱっと見バグってなさそうに見えてWAに原因がわからなかったので解き方を変えてACした。後でテストケースが公開されたら確認しておこう。

C - Counting 2

入力されたx以上のAが何個あるかを答える問題。制約を見ると、Nの大きさ的には二重ループはTLEしそう。
ソートしたAからx以上となる境目を探せれば良いので二分探索が使える。 二分探索を使っても二重ループよりは計算量が軽いのでTLEにはならずに済む。

D - Neighbors

問題文を読んでまずは、隣り合える上限は2人までというのが思いつく。
なので人Xの隣に並べないといけない人が何人いるかを数えて3人以上なら条件を満たせないとわかる。
あとはループがある時は横一列に並べられないので、人をノード、隣り合うときは辺でつながっているとみなして、そのグラフにループがないかを確認すれば条件を満たせるかどうかを判断できる。