Codeforces Round 921 (Div. 1) A一完でした。順位表を見るとB飛ばすべきだったのかも……。
— titia (@titia_til) January 27, 2024
A n回、全ての文字を使い切るindexを調べる。その最後に現れた文字をもっておく。
B stoqさんのブログ(https://t.co/wF4sfpn6ct)のコードを使わせてもらった。……が、WA on 8が取れず。えー。
2024年1月28日日曜日
Codeforces Round 921 (Div. 1)
A一完で紫に落ちた。
コンテスト後のツイート
等差数列をセグ木で扱えることは知っていたが、どうすれば良いか覚えていなかったので、検索するとstoqさんのこの記事が出てきた。
等差数列を足し込む遅延セグ木があることを知り、そのコードを拝借して解こうとした動き自体は良かった。遅延セグ木を使う問題だとPyPyじゃ間に合わないことも多いしね。
しかし、C++に慣れていないためコードを直すのに時間がかかり、WAが出た後の修正もできなかった。
結局、間違っていたのは、「upper_bound()をそれ以下のindexが現れる最大のindex」だ
と思うという勘違いのため。
lowerとupperで対称的なのかと思ってしまったんだねぇ。そして、それでもtest7まで通ってしまったため、定義を確認したり色々なケースを試そうという気持ちになれなかった。せめて他のケースを試していれば気付けて時間内に修正できた可能性はあるね……。そこも反省。
・lower_boundはbisect_left
・upper_boundはbisect
胆に銘じておこう。
なお、その他に添え字ミスもしていて結構ACは遠かった。test7まで通ってるから本質的なミスじゃないはず、と思ったのがはっきり間違いでした。
AtCoder Beginner Contest 338
Eまで五完。
コンテスト後のツイート
AtCoder Beginner Contest 338 Eまで。Fの解説見たら確かに、となった。
— titia (@titia_til) January 27, 2024
B Counter
C 料理Aを何個作れるか全探索。N<=10。
D 平面走査っぽくやると差分計算に持ち込める。難しい。
E 円形じゃない場合での、区間同士が重ならないか判定したら通った(未証明)。解説を開いたら証明略と書いてあった。
F - Negative Traveling Salesman
解説AC。
ワーシャルフロイド法により、二点間の最短距離を全て求めておく。その距離を使って、全点を巡る距離をbit DPで求めれば良い。
x→zよりx→y→zが短いとき、前者で計算してしまうのが問題になる気がするが、結局後者でも計算することになり、通った集合が後者の方が優れているのでこれで答えが求まる。
G - evall
解説放送を見てAC。
解説放送を見たときは実装が大変に思えたが、そこまで大変な実装ではなかった。なお、再帰で書いたらPyPyではTLEになり、Pythonで提出したらACした。
2024年1月27日土曜日
yukicoder contest 416
AB二完。C分からず眠ってしまったが、眠くなくても解けなていなかった可能性が高い。
No.2616 中央番目の中央値
解説AC。
計算量が二乗になるところまでは良くて、そこからの式変形が難しい。ヴァンデルモンドの畳み込みを知っていれば思いつきやすかったらしい。解法ツイートを見てもこれを使っている人が多い。
自力で解くなら、ちゃんと式に書く→検索する(Wolfram alphaを使う)という感じだったかなぁ。二乗方針を思い付いてはいたが、式に書き下していなかったのはまずくて、手間を惜しまずちゃんと式にして考えるべきだった。
No.2617 容量3のナップザック
一応自力AC。
最初、貪欲に価値が高いものを詰めていけば良いのでは? と実装してWA。価値3の個数を三分探索し、価値2のをいくつ取るか全探索したらACしました。
多分、価値2のやつも三分探索で大丈夫そうですね。
No.2618 除霊
解説AC。
何か難しい考え方を使うわけではなく、適切に場合分けして、適切にまとめれば解ける。そういう問題こそ実力が問われるねぇ。
解けるまで自力で考えるべきだったか。
No.2619 Sorted Nim
解説AC。
最初、解説を読んでも意味が分からなかったけど、この問題と本質的に同じだという言及を見て考えたら、なるほど、という気持ちになった。
2024年1月22日月曜日
AtCoder Regular Contest 170
Cまで三完。
コンテスト後のツイート
C S[i]=1のときはmexを入れるしかない。S[i]=0のときは、1~Mまでで使っていない要素を埋めるように入れるか、埋めないように入れるかでDP。
— titia (@titia_til) January 21, 2024
D - Triangle Card Game
解説AC。
コンテスト中は、同じカードを二度出して良いって条件で考えていたことに気付いた。自分の実装だと、簡単には修正できなかった(頑張れば修正できそうだが……)のだが、noshi91さんの解説を見ると、「Aliceが最初選ぶ手は、min(B)に関する条件を満たすもののうち最大のものとして良い」とあり、これを使ってAC。実装が大分楽になりました。
A[i]を全探索という方針に走ってしまうと思いつきにくいけど、これ自体は言われてみれば確かに……という感じ。
誤読してなかったとしても、実装に苦戦してACできなかったと思うけど、Cを飛ばしてDにいっていたらACできた可能性はあるかなぁ。
2024年1月20日土曜日
Codeforces Round 920 (Div. 3)
遅刻してEまで。
コンテスト後のツイート
Codeforces Round 920 (Div. 3) 遅刻してEまで
— titia (@titia_til) January 15, 2024
B (A[i],B[i])=(0,1),(1,0)となるindexの個数のうち多い方
C DP(要素一個)
D Aを昇順、Bを降順ソートして組合せ。どこまで左から組み合わせるか全探索
E yの差で分類して、攻撃側と壁の間に防御側を挟み込む。攻撃側と壁との距離で判定
F 平方分割?
F. Sum of Progression
自力AC。
平方分割で、最近のABCに出た問題とほぼ同じ考え方で解けますね。ただ、こっちは、累積和に加えてx+2*x+..ももたないといけないのがちょっと難しかった。
2024年1月19日金曜日
AtCoder Beginner Contest 335(Sponsored by Mynavi)
Fまで六完。黄色に復帰できたのは嬉しかった。
コンテスト後のツイート
AtCoder Beginner Contest 335(Sponsored by Mynavi) Fまで。
— titia (@titia_til) January 6, 2024
B for文を三つ。
C [(1,0),(2,0),...]の逆順のリストを用意し、後ろに追加していく。
D ぐるぐる
E 同じ数字をUnion-findでまとめてダイクストラ
F 後ろから見るとDP。xおきの総和を知りたいが、愚直だと間に合わないので平方分割。
G - Discrete Logarithm Problems
解説AC。解説放送も見ました。
・素数pについて、Z/pZに積を演算としてみたものは元の個数がp-1個の巡回群になる。
・各要素の位数はp-1の約数になる。
あたりは知識としてもっていたかった。(もっていたはずだが、よく覚えていなかった。コンテスト中に一応理解できたが)
そのうえで、
・位数が約数・倍数の関係になっているとき、今回の問題の条件を満たす
・各要素の位数を求めることができる
ことが分かれば解ける。
整理して考えればそこまで難しい問題ではないのだが……。
ただ、各要素の位数の求め方はちょっと思いつきにくいので、次出題されたとき解けるようにしておきたい。
2024年1月14日日曜日
Codeforces Round 919 (Div. 2)
Dまで四完。
コンテスト後のツイート
D 操作をx回行ったときのAの長さをもっておき、クエリkが何回目の操作で超えるかを二分探索。その操作が倍加のものだったら、余りを取って同じことを行う。
— titia (@titia_til) January 13, 2024
E DP[x][y]を直前にy個0があり、良いstringの個数がx個である個数というDP。x,yを小さい方からやっていけば三乗になるけど、三乗で通るのかな。
E. Counting Binary Strings
ツイートした方法で通った。
D通した時点で残り時間が少なかったけど、そこまで難しくないDPなので20分あれば通せて良かった。DPの高速化する問題だろう、と思うなら、dict(Counter)でDPを実装したのは筋が悪かった。dictで実装すると高速化が必要なとき手間が増えてしまう。
2024年1月13日土曜日
yukicoder contest 414
Cまで三完。
No.2603 Tone Correction
解説AC。類題
こういう区間に関する問題で階差を取るのは結構何度もやっているのに、身に着いていなかった。
No.2604 Initial Motion
最小費用流の問題だとは思ったのだが、各点から各点への最短距離を前計算しなくてはいけないと思ってしまった。グラフを直接利用して最小費用流へ持ち込むことができる。(が、自前の最小費用流ライブラリだとTLE。うーん)
登録:
投稿 (Atom)