週記(2024/01/15-2024/01/21)

01/15(月)

午後3時半前に起床。年が明けて初めてのインターン先定例会に参加した。

昨年末、修論に取り組むためしばらく進捗がないと宣言した通り、何もやっていない。ただ定例会に参加したのだから何か話しておこうと思い、修論に関する今後のスケジュールをお知らせした。01/29に修論発表会があるので、その日の定例会はお休みする予定だ。

勉強会はプリューファーコードの話だった。相変わらず難しい。ただ、数列を作るアルゴリズムが辺を1本残して停止する理由に新しい解釈ができた。他の辺を残った辺から出る方向に向き付けることを考えると、すべての頂点について出次数が次数引く1になる。1点だけになるところまで進めると、その残した1点だけ食い違ってしまう。

解散後購買に向かってラノベを受け取り、食事して帰ってきた。家を出るころにちょうど雪が降り始めた感じで、帰り道では薄っすら積もっていた。

帰宅後はまず先週の週記を書き進めた。相変わらずコンテスト関連で穴あきまみれなのには早々に見切りをつけ、午後10時過ぎに投稿。その後修論に取り組んだ。

午後11時半からCF #920 div.3に参加。

Dashboard - Codeforces Round 920 (Div. 3) - Codeforces

書く:CF

www.youtube.com

また修論に戻ったが、朝方には集中力を失いYouTubeを見てしまっていた。午前9時就寝。

01/16(火)

午後3時起床。

以前の週記で冬のLAシンポジウムに参加すると言っていたが、指導教員の先生に許可が取り消されたためキャンセルすることになった。旅費補助をもらうにあたり運営に補助あるいは自費での前泊ができないかを問い合わせていたところ、疑念を持たれるような行動はするなと怒られた。実際当日の午前7時くらいに出れば間に合うのでまあ無理だろうなとは思っていたものの、聞くことすら許されないとは……。営利企業と税金が使われるアカデミアの違いが分かっていなかった、というところだろう。

先週に引き続き今日も修論執筆合宿を行う。学食に寄りつつ、ほぼ予定通りの午後4時半過ぎにホスフィンが所属する研究室に到着し、それから午後11時半まで修論と取り組んでいた。今日は時間が長く取れたし会話の量も少なめだったため、結構進んだのではないかと思う。もうしばらく作業すればひとまず完成したと先生に伝えることができそう。

帰宅間際、ICPCプレーオフの準備でホスフィンとチームAobayama_doctorsのメンバーが話し合っていた。カザフスタンに行ったとき飛行機が全然苦にならなかったので同じくらいの時間ならLCCでいいんじゃないのと口出ししたのだが、実は自分が乗ったアシアナ航空LCCではなくちゃんとした航空会社らしい。そりゃ機内食も出るし足元もゆったりしているわけだ。余計なことを言ってしまったなと後悔している。

終電で帰宅。しばらくPCの前に座っていたが修論に取り組んでいたわけではなく、TLを見たりYouTubeを見たりしていた。眠気から午前1時過ぎに布団に倒れこみ、就寝。

01/17(水)

午前6時に目を覚まし、しばらくラノベを読んでいた。午前10時に二度寝

午後3時くらいにもう一度目を覚ました。今日は修論執筆合宿を行わない予定である。それでも資料室に行って昔の修論を読んだり参考文献とする教科書を確認しようかなと思っていたのだが、検索すると目星を付けていた教科書がちょうど貸し出し中だった。前者の目的だけで家を出るのも面倒。外出の予定が消えたのでもうひと眠りすることにした。

次に起きたのが午後7時半くらい。修論もあと少しと思うと、もうちょっと休んでいても読んでもいいかなという気持ちになってきた。朝方までに先生に送ることができれば寝て起きるころには添削が帰ってきているはず。ということで布団から出ず、スマホでなろうを読み始めた。

01/18(木)

気づいたら夜が明けていた。寝落ちしたわけではなく、ずっとなろうを読み続けていたのである。午前7時前後にようやく布団から脱出することに成功した。

修論執筆開始。朝はダメでも昼くらいには見せたいなと考えながら作業していたが、思っていたより時間がかかって全然間に合わなかった。午後4時になってようやく完成。昨日確認する予定だった教科書はネットにPDFが転がっていたため難を逃れた。

眠くて考えがまとまらないため自分で読み返すのは諦め、すぐ先生にメールを送って寝た。

01/19(金)

01/18 午後11時起床。ここから金曜日ということにする。今日の午後5時が修論提出締め切り。

修論はOverleafで書いており、リンクをあらかじめ先生に共有していた。それで自分が昨日格闘している最中にも文章を読んでいたのだろうか、寝てすぐ修正事項のメールが届いていたようだ。自分は夢の中であるから当然一向に修正されないのだが、それに業を煮やしてかどんどん語調の強まっていくメールが2本、2時間おきに届いており、肝を冷やした。

最後のメールには「明日の2時まで」と書いてあった。自分はこれを午前2時と解釈し、ECRを諦めて執筆に取り組み始めたのだが、後からよく確認すると午後2時のことだった。コンテストに出損ねて残念。ともかくそのまま格闘を続け、正午に再度送信した。修正点を直すのに加え、ページ数が少ないと言われたので新しい内容を追加して文章を増やしてある。

残るは要旨2ページのみ。イントロをコピペすればほぼ完成だろうと舐めており、シャワーを浴びたりなろうに少し手を出してから取り掛かったのだが、これが思ったより大変だった。何をどんな粒度で書けばよいのか、と迷っているうちにどんどん時間が過ぎていく。エイヤと書き始めたらぴったり2ページになってくれたので、これもすぐ先生に送った。午後2時半だった。

午後3時から大学で先生と打ち合わせをする予定。食事する暇もなく地下鉄で登校し、教室で待ち構えていた先生と1時間ほど話しながら最後の修正を行った。その後院生室で印刷し、提出。

さらに今後について先生と2時間ほど話し合いを行った。そこで出た話を一つ。修論というのは、修士2年間で自分が学んだことを書くものらしい。今日の午前中慌てて増やしていた部分は自分の主な結果とはそれほど関わりがなく、論文としてどうなんだ……と思っていたが、そういうことならまあ意味があったかなと納得できる。

結局自分の修論は表紙を除いて40ページだった。院生室にたむろしていた友人は皆そんなものと言っていたが、先生からすると博士課程に進学するなら少ないらしい。今の話を聞いた後だと確かに同意できるし、書く時間がそもそもなかったとは言え追加できる内容はまだあったので、残念。

あとは、修論発表会とは別に進学試験があることも知った。実は同じものだと思っていて、発表会20分で何が審査できるのだろうとか考えていた。ちゃんと別日に1時間確保されるようだ。ヤバいかもしれない。

学食で食事し帰宅。yukicoderのため待機していたが、眠気に耐え兼ねて午後8時過ぎに寝た。

01/20(土)

午前2時くらいに目を覚まし、なろうを読み始めた。当然のように止まらなくなって9時間熱中。何とかもう一度寝直し、午後2時直前に再度起床してUniversal Cupに出た。今日は19回目、Estoniaセット。

The 2nd Universal Cup. Stage 19: Estonia - Dashboard - Contest - QOJ.ac

書く:UC

感想戦後慌てて食事し、午後9時からABC337。

Toyota Programming Contest 2024#1(AtCoder Beginner Contest 337) - AtCoder

書く:ABC

www.youtube.com

実はTechFULの新春TCB2024が明日までである。うっかりなろうを読み始めたため今日はもう無理かと思ったが、何とか欲望を抑え込むことに成功。午前3時半から開始した。眠気で頭が回っていない感じがちょっとあったもののなんだかんだ全問解いた。

https://techful-programming.com/techful/event/5321

5問目は総和のチェックを忘れ1WA、6問目は桁合わせのための0をうっかり小数点の直後に追加してしまい1WA。どちらも-6pt。9問目は難しかった。P=(Q\oplus N)-Nと見ると、Qで立っていないbitはどうでもよいことがわかる。また上のbitから貪欲に調整するしかないので、それでチェック。17分かかって-5pt。

11問目はややこしい。枝分かれ以降の頂点全部を番号順に並べ、どの枝分かれ先にいるかでラベルを付けることにすると、操作はこの列を一つ左にrotateするものとなる。これが分かれば後はZ-algorithmでOK。

12問目は謎の貪欲をずっと考えていてとんでもないことになった。?の個数が少ないのがよくわかっていなかったが、冷静になると個数の3乗でdp、あるいはメモ化再帰ができる。操作は必ず両端のどちらかに行うべきなので、左右からどれだけ行われたかに加え先手が何回左端を操作したかで状態を表現できる。77分かかって-49pt。

13問目はちょっと面白かった。Sがソート済みであるとして、S_iをピボットにS_jを並べることになる確率は、iが選ばれるまでにijの間のインデックスが選ばれないという条件から\frac{1}{|i-j|+1}となる。あとはこれをLCPごとに足し合わせたいが、LCPはO\left(\sqrt{\sum|S|}\right)種類しかないので愚直に見てよい。

14問目は正規系を作って比較する方針。削除できる要素をできるだけ削除した後辞書順最小にするとランダムケースを通った。削除のほうは簡単に線形時間になる。辞書順最小は難しいが、大きな要素から順にできるだけ前に寄せていくと考えれば、双方向連結リストで数列を管理し、そこから今見ている要素より1大きな要素のみ抜き出して持っておくことで実装できる。うっかり2乗かかるコードのまま投げてしまい1TLE、さらに51分弱かかっていて-42pt。

15問目はわからないが、どうせまともなテストケースは入っていないだろうと速そうなコードを投げたら通った。suffix arrayで最も前にあるインデックスが答えの候補で、真の答えはそのprefixになる。短いprefixは一つ一つ確認し、長いprefixはLCP arrayで区間を調べて一気に見た。おそらくO(N^2\log N)だがLCP arrayで見ることになる区間の数を多くしようとすると短いprefixのほうですぐ見つかってしまうのではないか。ランダムケースで試すなどしていたら実装に時間がかかり、42分弱で-15pt。

合計回答時間は4時間ちょっとで、失点は123ptだった。

食事したりなろうを読んだりして午前10時半就寝。

01/21(日)

午後8時半起床。お菓子で食事を済ませて午後9時からARC170に出た。

AtCoder Regular Contest 170 - AtCoder

書く:ARC

www.youtube.com

新春TCB2024が終了していた。7位。速度も点数もボロ負け。

食事した後は年末年始の帰省でもらってきたお酒を飲みながら日記を書いていた。

朝方、眠気に負けて机で2時間ほど寝てしまったらしい。慌てて布団に移動し寝なおす……つもりがまたなろうを読み始めてしまった。寝落ちもせずのうのうと正午まで読み続け、さすがにまずいなと思い就寝。

今週を破壊しつくしたなろうは「影の勇者の再冒険 ~~Re-Tale of the Brave~~」。年末、読み返し始めたと言っていたものである。何とか800話ちょっとで止められたはずだったのに再開してしまった。

https://ncode.syosetu.com/n5534co/