週記 2023/07/31〜2023/08/06

2023/07/31

17時ごろに起きる。

キットカットの栗何ちゃらを食べる。甘い。エアコンの不調で室温が高く、思ったより溶けていたので、とりあえず冷蔵庫にぶち込んで明日も食べてみようと思う。

妖怪PCいじいじ。 ABC280-Dの”Factorial and Multiple”を解く。とりあえずKの素因数の一番大きいやつを出力するコードを投げてWAをもらった(提出を見返してみると、過去にも同様の提出でWAになっていて面白い。成長していないぜ)。(5桁くらいの数)!を10進法で表記したとき、末尾の0は何個になる?という問題をどこかでやった事があって、それを思い出した。ググってみると、どうやらルジャンドルの定理というものが便利らしいとわかった。

しかし、それをうまく活かす事ができず解説をチラ見。なんだこれは!チラ見してキーワードを拾おうと思ったものの、うまくいかなかった。

ひ〜となりながら、ユーザー解説の節に行くと、「ルジャンドルの定理」という文字が見えたので、解説を閉じてその方向で考えることにした。しばらく考えて、Kの素因数ごとにルジャンドルの定理を使って何回割れるかを調べれば良くね?と思いついたものの、じゃあそれからどうするのさ…となってしまい、再び解説を覗く。今度は「二分探索」という文字が見えた。確かに!!!となり、N!のNを二分探索するコードを書いてACできた。ルジャンドルの定理がおもしろい。

https://atcoder.jp/contests/abc280/tasks/abc280_d

2023/08/01

18時ごろに起きる。

妖怪PCいじいじ。

ABC277-Dの"Takahashi's Solitaire"を解く。問題文をぱっと見するとMODという文字列があってちょっとぎょっとした。"Marking"以来MODが若干怖くなったらしい。どういう感じでいけるのかしら?問題文を眺めながら、サンプルの入力を手作業で解いてみると、なんとなくそれらしい解法が見えた。Aをソートして、隣り合う二つと末尾と先頭の要素の差が1以下だったら、その二つを"繋げる"。繋げた連結成分ごとに合計を計算して、Sum(A) - 合計の最大値を出力する。

最初の実装は、連結成分ごとに値を持てるUnionFindを使った。連結成分をくっつけると、渡しておいた関数(この場合は加算)が二つの値をごにょごにょして、新しい連結成分の値としてくれる。データ構造べんり~。

UnionFindを使った解法が大体500msで、それに頼らないで書いた丁寧な実装が250msくらいだった。

https://atcoder.jp/contests/abc277/tasks/abc277_d https://atcoder.jp/contests/abc277/submissions/44167963 https://atcoder.jp/contests/abc277/submissions/44168138

2023/08/02

15時ごろに起きる。

学校に電話を掛かないといけない。めんどくせ~~と思いながらゴロゴロしていたら16時になってしまった。流石にいけないので電話をかける。

学校に電話をかけるにあたって、社会性ギアを何段も上げたので疲れた。

一仕事終えたし寝るか~~~と思ったけど、そういえばスプラトゥーンのカタログレベルがまだ20位しかないなと思い出した。シーズン終るまでに100にしたいし、せっかくだしちょっとイカするか~という事でスプラトゥーンをプレイ。

イベントマッチで、ブキチ杯(武器ランダム)が行われていた。おもしろい。

2023/08/03

18時ごろに起きる。

スプラをやる。

2023/08/04

18時ごろに起きる。

2023/08/05

眠れず、11時ごろまで活動して眠った。

20時ごろに起きる。

ABCに出る。今回は大会の予選を兼ねているので、問題がちょっと難しいらしい。そんなの関係ねえとRated参加したものの、ABCの3完で残念な結果に...。

A問題は脊髄反射でmax(a)-min(a)を提出しそうになったけど、脳の方で「あれ違うぞ?」となってちゃんと考えてACすることができた。

B問題は、「競技プログラマーXより強い競技プログラマー」を持つ連想配列を作って調べた。いいかんじ

C問題、難しい...。

iPadにキーボードがあると便利だろうということで、iPad用のMagic Keyboardを注文した。明日届くらしい。早すぎる

2023/08/06

18時ごろに起きる。

注文したキーボードは届いたかと家族に聞いてみると、届いていないと言う。あれ〜?今日届くはずだったんだけどな〜と思いつつゴロゴロしていた。飯を食ってからちょっとして、一応郵便受けを見ておこうと思い、行ってみるとちゃんと届いていた。

開封の儀を行なって、早速iPadに装着。これもうノートパソコンだろ。やば

Windows系しか触ったことがなく、Mac系のキーボードはよくわからない。GitHub CodespacesでVSCodeを開いても、ショートカットキーとかが全くわからない。コードのフォーマットができないままメチャクチャになっていく。ショートカットキーをちゃんと覚えたら色々かなり便利にできそう。頑張るぞ〜