A~Fの6完
tokuminiさんのAtCoder Beginner Contest 285での成績:198位 パフォーマンス:1999相当 レーティング:1910→1919 (+9) :) #AtCoder #ABC285 https://atcoder.jp/users/tokumini/history/share/abc285?lang=ja
ギリギリ黄色パフォーマンスに届かず。
A問題
画像を見ないと解けない問題、ChatGPT対策来たな。
念の為の場合にスワップする処理を入れたけど制約を良く見ると不要だった。
B問題
意味がわからなくてかなり時間がかかった。1-indexedで書かれている問題文を0-indexedに翻訳することができなかったので、文字列の先頭にダミー文字を入れて1-indexedで扱うようにした。
出力するのはまでなのに、も出力してしまい1WA。サンプルの確認を目視でやっているせいでこういうミスが出る。
C問題
26進数として考えるのは良いとして、1問目からなので答えが1ズレるかもとか考えたけど、サンプルがちゃんとあるので実装してみて合わせるということで。
D問題
サイクルができるとダメだろうというなんとなくの考察でUnion-Findをやりにいった。微妙に正当性に自信はなかったけど、間違っていたらWAが出てから考えれば良い。
E問題
休みと休みの間隔が決まれば、その間の生産量の和はで求めるな〜というのが初手(事前計算はしておく)。
なので
というものを考えたけれど、遷移は「直前の休みがであるところから」であり、かかるのでこれだとダメ。
ちょっと考えると「i日目まで考えて」という部分が要らないなと思ってそれで高速化できる。答えを求めるときに、jより右側を計算することを忘れないようにする。
競プロのために競プロをやっているとこういうのが自然と解けるようになる。
F問題
「S[L:R] は文字の昇順に並んでいる」だけで良いのかと思って、各文字の出現位置をstd::set
で保持する実装を提出して1WA。
よく考えると「各文字の出現文字数が...,0, 0, 1~最大, 最大, 最大, 1~最大, 0, 0,...」という感じになることも必要だと思って、これをどうするかちょっと悩んだが、最近std::set
の上位互換であるtreeというのを見かけたなぁと思ってそれを使いにいった。
しかしもう一度WA。クエリタイプ1のとき、文字列S自体を変更することを忘れていた。同じ位置を2回変更するようなテストケースを考えないとどうしてWAになるのかなかなかわからず、とても時間がかかった。もったいない。
G問題
手を付けた時点で残り11分くらいだった。見た目がもう「フローで解いてください」と主張しているのでそれっぽいものを考えるが、まとまりきる前に時間切れ。F問題で妙に時間を取られていなければ可能性があったかどうか。