2022/11/19に開催されたAtCoder Beginner Contest 278に参加しました。
先週のABCは、D問題でバグらせたり、E問題で時間がなかったりと散々な内容で爆死しました。今回はその負け分をすこしでも取り戻そうという気持ちで臨みました。
Rated参加します。前回3完という残念な結果だったので、今回は取り返せるように頑張ります。
— devgenjin77 (@devgenjin77) 2022年11月19日
AtCoder Beginner Contest 278 - AtCoder https://t.co/PxgcGNqcmJ
今回の結果
なんとか5完を確保!しかし、順位表からみると少しイマイチという感じの結果でした。。
なんと5完でもパフォーマンスは緑色。。レートは微増しましたがパッとしない結果でした。
なんとも昨今の参加者のレベルの上がり方がすごいなあという感想しかありません。
5完緑パフォで、レーティングは微増しました😅
— devgenjin77 (@devgenjin77) 2022年11月19日
最近、参加者のレベルが上がっているのを感じます。もっと頑張らねば。
devgenjin77さんのAtCoder Beginner Contest 278での成績:1724位
パフォーマンス:1151相当
レーティング:1105→1110 (+5) :)#AtCoder #ABC278 https://t.co/dfJuQvb7qW
振り返り
時間があれば6完行けるかという感じでしたが、及ばず。
A問題
A問題にしては、だいぶややこしい問題を持ってきたなあという印象。
実装方法は色々考えられるが、とりあえず、配列を先頭から最大個分を読み飛ばしてから同サイズ配列に入れ直すというやり方で提出。
少し実装に時間をかけてしまいましたが、無事ACが取れました。
5分12秒で1完。
提出コード
https://atcoder.jp/contests/abc278/submissions/36602946
B問題
問題の意図を把握するのに少し時間がかかったものの、やることは時刻を1分ずつ進めて、それが見間違えやすい時刻になるかというのを全探索すれば良いだけ。
こちらも、提出1回で問題なくACが取れました。
13分52秒で2完。
提出コード
https://atcoder.jp/contests/abc278/submissions/36609023
C問題
グラフ問題にするのかと思ったが、制約を見てみると、なので、Mapで管理するような感じになるのかという印象。
//キー:ユーザーID、値:フォローしているユーザーIDの集合 HashMap<Integer, HashSet<Integer>>
上記のマップオブジェクトでフォロワーを管理。クエリの時に更新を行い、クエリの時に相互フォローしているかチェックする。
この実装でなんとかACを取り切ることができました。
24分38秒で3完。
提出コード
https://atcoder.jp/contests/abc278/submissions/36615660
D問題
当初クエリは、の全要素にを足すものと誤読したので、余計な時間を取られてしまいました。。
で、配列のすべての要素に代入するということで、遅延セグ木を使うような問題かと一瞬思いましたが、それは流石にオーバーかと。
ということで、とりあえず以下の解法で実装してみることに。
クエリが現れた回数と、直近のクエリで与えられたを覚えておく。
長さの配列を用意し、はクエリの何回目の値に基づくのかを管理する。
クエリではを参照する時に、をチェックし、クエリの出現回数と合う場合はそのまま計算。合わない場合は、直近のクエリの値を元に計算しなおす。
これで、1度の提出で問題なくACを取ることができました。
42分59秒で4完。今回は、なんとか5完はいけそうな感じです。
提出コード
https://atcoder.jp/contests/abc278/submissions/36624382
E問題
残り60分弱というところでも、EのAC数は1000に届こうかという勢いで解かれており、この問題をACしておかないと爆死する予感。
少し手強い問題だったが、以下のDPを使えばなんとかいけそうな感じがした。
- 左上から、マスの範囲にあるの個数。
これを使えば任意の範囲で、色が何個あるかがで分かる。あとは、塗りつぶす範囲にある各色の数と、グリッド全体にある各色の数を比較し、一致したら、種類数から減らしていくようにすれば良い。
ということで、実装に着手。結局実装とデバッグに時間が掛かったものの、なんとかACを取り切ることができました。
88分50秒で5完。が、、順位表を見ると、この時点では1700台ぐらい。。多分水パフォは厳しいな。
提出コード
https://atcoder.jp/contests/abc278/submissions/36639798
F問題
残り10分しかないが、とりあえず問題文を見る。
一見したところ、しりとりの繋がりで有向グラフを作り、各頂点をスタート地点としてから、DFSをすることで、先手後手どっちが勝つかを判定すればなんとかなるかという印象。
が、、残り10分程度しかない状態では、実装までは追いつかずでした。。ということで今回はここで時間切れ終了。
一応、ノーヒントで後で解き直すことはできたのですが、時間的には30分は必要だったようです。もう少し実装力をつけないとなあ。。
G問題
G - Generalized Subtraction Game
問題すら見れておりません。
Ex問題
問題すら見れておりません。
これまでの実績
レートは微増しましたが、今回の調子だと、今後緑をキープするのすら危うい感じがしますなあ。。
総括
今回、問題セットとしては、6完まで行けたかというところでしたが、D問題の誤読や、実装に時間をかけすぎなどの問題があったりで、大したパフォーマンスが出せませんでした。
あと、最近のABC参加者の全体のレベルが大分上がってきている気がしますね。数ヶ月前だと、今回の内容は水パフォぐらい取れる感じがしますが、5完でやっとこさ緑パフォというのはキツすぎる。
とりあえず、今後も精進を重ねて実力を上げていかないと緑レート維持すら怪しいという感じ。周りに取り残されないように今後も努力していこうと思います。
ということで、また次回も頑張ります。