読書記録(2024)

kotatsugame.hatenablog.com

1月

  • 12日
    推しにささげるダンジョングルメ01
  • 14日
    性別不詳VTuberたちがオフ会したら俺以外全員女子だった

2月

  • 2日
    放課後、ファミレスで、クラスのあの子と。
  • 21日
    一生働きたくない俺が、クラスメイトの大人気アイドルに懐かれたら5
    双子まとめて『カノジョ』にしない?2

3月

  • 20日
    アルゴリズムの乙女たち
  • 22日
    玄関前で顔の良すぎるダウナー系美少女を拾ったら
  • 23日
    物語に一切関係ないタイプの強キャラに転生しました

4月

  • 10日
    迷宮狂走曲2
  • 11日
    凡人転生の努力無双
  • 14日
    凶乱令嬢ニア・リストン4
  • 15日
    凶乱令嬢ニア・リストン5
  • 16日
    S級冒険者が歩む道2
  • 20日
    無能と言われ続けた魔導師、実は世界最強なのに幽閉されていたので自覚なし4
  • 21日
    家事代行のアルバイトを始めたら学園一の美少女の家族に気に入られちゃいました。
  • 23日
    国歌を作った男
  • 24日
    怠惰な悪辱貴族に転生した俺、シナリオをぶっ壊したら規格外の魔力で最凶になった
  • 27日
    スクール=パラベラム2
  • 28日
    魔王の元側近は勇者に転生しても忠誠を捧ぐ
    許嫁が出来たと思ったら、その許嫁が学校で有名な『悪役令嬢』だったんだけど、どうすればいい?4
    ツンな女神さまと、誰にも言えない秘密の関係。
  • 29日
    バスタード・ソードマン3
  • 30日
    やる気なし天才王子と氷の魔女の花嫁授業
    依存したがる彼女は僕の部屋に入り浸る2

5月

  • 1日
    現実離れした美少女転校生が、親の決めた同居相手で困る
  • 2日
    平民出身の帝国将官、無能な貴族上官を蹂躙して成り上がる
    戦地から帰ってきたタカシ君。普通に高校生活を送りたい1
  • 4日
    冬季限定ボンボンショコラ事件
    最強魔法師の隠遁計画18
  • 5日
    VTuberの幼なじみと声優の幼なじみが険悪すぎる
  • 7日
    クラスで2番目に可愛い女の子と友だちになった6
    ネトゲの嫁が人気アイドルだった4
    才女のお世話7,8
  • 14日
    凡人転生の努力無双2
    幼馴染のVTuber配信に出たら超神回で人生変わった
    キグナスの乙女たち2
  • 16日
    メイジアン・カンパニー3,4
    キグナスの乙女たち3
  • 17日
    キグナスの乙女たち4
    メイジアン・カンパニー5
  • 18日
    キグナスの乙女たち5
    メイジアン・カンパニー6
  • 19日
    夜の帳に闇は閃く
  • 23日
    メイジアン・カンパニー7,8
    キグナスの乙女たち6
  • 25日
    俺は星間国家の悪徳領主!8
  • 28日
    煽り煽られしてたネトゲ仲間が品行方正な美人先輩だった話
    異能学園の最強は平穏に潜む2

6月

  • 7日
    異能学園の最強は平穏に潜む3
    孤高の華と呼ばれる英国美少女、義妹になったら不器用に甘えてきた1
  • 8日
    極めて傲慢たる悪役貴族の所業III
  • 9日
    血の繋がらない私たちが家族になるたった一つの方法1,2
  • 10日
    美少女フィギュアのお医者さんは青春を治せるか
  • 11日
    あんたで日常を彩りたい
  • 12日
    永遠についての証明
    煽り系ゲーム配信者(20歳)、配信の切り忘れによりいい人バレする。1,2
  • 13日
    異端な彼らの機密教室1,2
  • 14日
    非科学的な犯罪事件を解決するために必要なものは何ですか?
    現代社会で乙女ゲームの悪役令嬢をするのはちょっと大変5
  • 18日
    彼とカノジョの事業戦略1,2
  • 19日
    恋愛魔法学院1
  • 20日
    社畜剣聖、配信者になる1
    生放送!TSエルフ姫ちゃんねる
  • 21日
    君の先生でもヒロインになれますか?2
  • 22日
    商人令嬢はお金の力で無双する
  • 23日
    黄金の経験値IV
  • 24日
    冒険者酒場の料理人
  • 27日
    最強守護者と叡智の魔導姫1
  • 28日
    魔法警察ファンシー☆マリリン1
    双子探偵ムツキの先廻り
  • 29日
    地味なおじさん、実は英雄でした。
    カミガカリ 不自然言語処理殺人事件
  • 30日
    英雄ブランの人生計画1,2

7月

  • 2日
    ただの村人の僕が、三百年前の暴君皇子に転生してしまいました1
  • 3日
    ただの村人の僕が、三百年前の暴君皇子に転生してしまいました2
  • 4日
    推しにささげるダンジョングルメ02
  • 5日
    社畜剣聖、配信者になる2
  • 6日
    父娘のおいしい食卓
  • 7日
    一生働きたくない俺が、クラスメイトの大人気アイドルに懐かれたら6
  • 8日
    玄関前で顔の良すぎるダウナー系美少女を拾ったら2
  • 9日
    女友達は頼めば意外とヤらせてくれる3
  • 10日
    女友達は頼めば意外とヤらせてくれる4
    ギャルに優しいオタク君2
    純情ギャルと不器用マッチョの恋は焦れったい
  • 11日
    悪役御曹司の勘違い聖者生活3
    やり直し悪徳領主は反省しない!
  • 12日
    俺は義妹に嘘をつく
  • 13日
    俺は義妹に嘘をつく2

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

07/15(月)

午後4時起床。今日は祝日である。

午後11時過ぎまで先週の週記を書いていた。うっかり週末をすべてなろうに捧げてしまったため全然出来上がっておらず、コンテスト部分が軒並み穴あきのまま投稿することになった。

午後11時半からはCF #958 div.2。

Dashboard - Codeforces Round 958 (Div. 2) - Codeforces

Aは1k-1個作るように分割していくのがよいと考えてシミュレーションした。最後の状態からマージで元に戻すことを考えれば、最適な操作方法を考えずとも直ちに\lceil (N-1)/(K-1)\rceilが得られる。Bは連続する0それぞれに対して操作を行った後、全体を操作して1が残るか見る。0の個数と1の個数の差は[0,\dots,0]\rightarrow[0]でしか改善されない。

Cはnで立っているbitだけ取り出し、さらに0と1を反転して考えるとよい。条件は隣接2項のbitwise ANDが0かつ狭義単調減少ということになるから、MSBを少しずつ小さくしていくのが最適。末尾の0も含めて基本的にはk=\mathrm{popcnt}(n)+1が最長となり、nが2べきの場合だけa_1=0が許されないため1減る。

Dはモンスターごとに倒すラウンドを割り当てる問題として考える。頂点uにいるモンスターはラウンド\mathrm{deg}(u)+1までのどこかで確実に倒す機会が訪れるから、木dpの状態数はO(n)でよい。あとは計算量が壊れないように遷移する。区間更新を累積和にしたりと頑張ってみたが、取得がtop2だけでよいことを使えばもっと簡単だったようだ。

Eは要素の削除による差分を頑張って計算する。削除したとき区間の新たなMINとなる要素を一つ一つ見ていきたい。たくさんあるように思えたが、よく考えるとstackで累積MINを管理するテクで行うpopと対応がつくため、合計O(n)個しかなかった。あとは頑張って実装。削除する要素ではなく新たなMINとなる要素を起点に考えると、差分が発生する削除が高々2通りになってわかりやすかったようだ。

Fはnの位置を境に左右で分けるとまったく同じ構造をしている。空間計算量がO(n^2)でおさまるよう丁寧にdpしてマージするととりあえずO(n^5)が得られ、2次元畳み込みを行ったりして理論的にはO(n^3\log n)まで落ちたが、定数倍が重すぎてお話にならなかった。5完11位。

www.youtube.com

朝方、なろうの「臆病少女は世界を暗躍す。」を読了した。実力を完全に隠す主人公という触れ込みでハーメルンの捜索掲示板で紹介されていた作品。ネタバレになってしまうが、本当に隠しきったまま終わってびっくりした。完結を優先したのか回収されなかった要素が多く、キャラもイベントも何かありそうな気配がプンプンしていただけあって消化不良気味。

https://ncode.syosetu.com/n7693ci/

ハーメルンの「ローカル役でしかあがれない」を再読した。やはり面白い。稀に見るチートてんこ盛り主人公だが、すべての能力に「ローカル役」という一つの根っこがあるため、説得力があり、また能力を使いこなしているという印象を受ける。

syosetu.org

シャワーを浴びて布団に入り、ネット小説を漁ってまた1作読み始めた。午前11時半くらいに寝落ち。

07/16(火)

記録によれば午後7時から午後8時半、午後11時から午前3時にかけてなろうを読んでいたらしい。ほかの時間は寝ていた。

07/17(水)

この日は午前7時から午後3時、午後6時から午後7時、午後9時から午前3時にかけて読んでいたようだ。

07/18(木)

午前7時起床。なろうを読んでいたら正午になったので、シャワーを浴びてセミナーのため出発した。雨が降っていたので地下鉄で登校し、昼食は学食で摂った。

午後1時半からセミナー開始。今日は先週末行っていた数値計算の話だけで2時間使い切った。またここ最近はかなり前に用意した内容をじっくり進めていたが、さすがに時間をかけすぎているし、特に怪しかったり難しかったりする点はないため、スキップして来週から別の論文に基づいて話すことになった。つまり来週以降はちゃんと準備を行う必要があり、今週のようにずっとなろうを読んでいるような余裕はない。

その後後輩の発表。2次方程式を解いているが2次の係数が0だった場合はどうなるか、ゼロ除算が発生した場合はどのような解になるか、とか細かいところを聞いたら少しグダグダになってしまった。まあ壊れたりするようなことはなく、全部上手くいくことが確認できてよかった。午後6時過ぎに解散。

院生室に移動してしばらく喋っていたら学食が閉店しかけたので、慌てて駆け込み夕食を摂った。食後はまた院生室に戻り、午後9時半くらいになってようやく帰路に就いた。

帰宅してシャワーを浴び、tatyamさんのスライド「定数倍高速化の技術」を読んだ。低レイヤの話を丁寧に行うことで、いろんな定数倍高速化テクの原理を明らかにしており、大変参考になる。

定数倍高速化の技術 - Speaker Deck

午後11時半からCF #959 combinedに参加した。もともと3時間9問の予定だったはずがいつの間にか2時間8問になっていて不穏。

Dashboard - Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2) - Codeforces

Aはaの値を1ずつずらせばよい。nm=1の場合は不可能。Bは0のみからなるprefix以外を任意に書き換えられる。Cはlを固定して尺取りで次にg=0となるタイミングを求めると、ごく単純なdpができる。なんと尺取りに失敗して1WA。端を縮めるためのwhileをifにしていた。

Dは面白い。xの降順に張る辺を決めていくと、連結成分がちょうどx+1個あるため鳩ノ巣原理から辺の候補が必ず存在する。Eは葉を取り除いていくことで木のサイズを任意に調整できるため、nまたはnの適当なbitを下ろしてそれ未満をすべて立てた数のbitwise ORが得られる。

Fはc=0なる辺をいくつか削除し、残った辺が連結かつすべての頂点の次数が偶数になっていればよい。後者の条件については、次数が奇数の頂点をc=0の辺のみで繋ぎ、それぞれのパスのXORを取れば構築可能。しかし前者が問題。しばらく考えてふと問題文を読んだら「c=1の辺のみで」連結であることが保証されていた。制約に書いておいてほしい。オイラー閉路の復元はdfsして帰りがけ順に辺を並べると簡単。

Gはカス。下の桁からdpしたらO(nk)になっていた。Hは"aa"を聞くと(p+1)\bmod m=p+1が得られることに気づいたものの、mをどう求めるかわからず時間切れ。ハッシュ値m-1またはそのくらい大きな値になるような文字列を作ろうとする乱択コードを書いていたが、後から提出したらWAだった。

7完67位で3010→2961(-49)。せっかく前回LGMになったのに、また落ちてしまった。1回も耐えられたことがない。今日のセットはcombinedにしてはかなり簡単だった。ボス問やそれに類する問題が爆破されたのだろうか。開催を強行せずに延期してほしかった。

www.youtube.com

なろうを読んで午前6時半ごろ寝落ち。

07/19(金)

午前9時過ぎ起床。今日は先生が招いたM2の学生のセミナーを聞きに行く。曇り空だが天気予報的にあまり雨が降りそうになかったので、念のためカッパを荷物に入れつつ原付で登校した。セミナーは10時開始で、購買も同じ時間に開くため、最初10分ほど抜けさせてもらい朝食を摂った。

午前の部はまず今日の目標について話し、前提となる知識や事前準備を済ませ、いよいよ目標の話が始まるというところで終了。内容はもちろん構成や時間配分も非常に良かった。発表者と先生とともに学食で昼食を摂り午後1時から再開。こちらは詳しい証明の内容がまだ理解しきれていなかったらしく、専ら主張の確認に留まった。あれこれ口出しするタイミングもあって、これはこれで楽しかった。

セミナー終了後は先生を交えて議論し、先生が帰宅されてからも二人で雑談を続けていた。数学科の学生ではなく情報科学研究科の数学教室の学生ということで、普段の活動をお互いに質問しあったり、博士課程進学について話したり。午後5時過ぎに解散し、少し院生室に顔を出して下山した。

川内キャンパスの購買でラノベを買い、夕食を摂って帰宅。疲れ果ていつの間にか床で寝落ちしていたが、午後9時に目覚ましで起きた。この目覚ましはyukicoderに向けてのもの。急いでシャワーを浴び、20分からyukicoder 437に出た。

yukicoder contest 437 ('09 Contest 002 day2) - yukicoder

Aは\gcdができるので、Sの要素が\gcd(T)で割り切れるか確認すればよい。Bは全然わからず、苦し紛れに絶対値が小さい2数を貪欲に足すシミュレーションを投げたら通った。解説を読んで考えてみたが、最小値と最大値をできるだけ使わないように操作すれば良いはず。

Cは実験してGrundy数を決定する。証明は知らない。Dは実験したが実験コードがバグっていて大変な目にあった。結論は簡単で、Nが2べきならXの偶奇が確定し、そうでないならSによらずNの偶奇で勝敗が決まる。1時間以上かけてACした。

残り時間が短いのでsolved数を見てEを飛ばした。FはO(N)の式を合わせたあとWolfram|Alphaに投げてO(\log\mathrm{mod})に。Gはさすがに親の顔より見たが、1次式の積を求めるパートも含め3分足らずで書けたのは偉い。入力受け取りでオーバーフローして1WAしつつ、ギリギリ修正が間に合って残り15秒で滑り込みAC。

6完13位。後からEとHをupsolveした。EはSに対する解の構造を丁寧に考えると非常にシンプルな結論となった。Hは\prod C=Nならよいらしい。そのようなCについての\sum Cの総和を求めることになり、Nの素因数ごとに数え上げや寄与の計算が行える。

なろうを読んで午前4時過ぎ寝落ち。

07/20(土)

正午から午後4時半までなろうを読んでいたらしい。二度寝して午後8時起床。食事を済ませ午後9時からABC363に参加した。

AtCoder Beginner Contest 363 - AtCoder

Aは100-(R\bmod 100)。BはP番目に髪の長い人が長さTになるまでの日数。Cは全探索。Dはまず桁数を求め、その後は算数で一発。EはBFS。Fはa\times\mathrm{rev}(a)の形をした数で何度か割ってみて、(十進表記で0を含まない)回文数が得られればよい。a\le\sqrt{N}を全部試して愚直にチェックするくらいしか思いつかなかったが、投げてみたら爆速だった。ただし復元でミスしてサンプルすら合っておらず、1WA。

Gはクエリがなければ優先度付きキューを使って日付の降順に見ることによってO(N\log N)で解ける。ここで何日目に何の仕事をして報酬を得たか管理しておくと、仕事の削除と仕事の追加に対応する差分更新が両方O(N)でできることに気づいた。仕事が削除されたら後ろから詰めていけばよく、仕事が追加されたら前のほうに押し出せばよい。このO(QN)を定数倍高速化することにした。

日付に対して仕事のIDだけでなくDPも同時に持つと、ランダムアクセスが減るし、仕事をしない日も統一的に管理できて場合分けが減る。これは一つのポイントだと考えていたが、後から試してみたら1sec強の改善でしかなくTLE解消にはそれほど役立たなかったようだ。

一番大変なパートは、削除された仕事の代わりに行う仕事を探す部分らしい。報酬を得るタイミングがなくあぶれていて、Dがある程度大きいもののうち、Pが最大となる仕事を探したい。愚直にチェックしていては間に合わなかったのでsetを使ってみた。これであぶれている仕事をPの降順に取得できる。さらにDの判定を省略するため、適当な定数W:=1000を用意し、\lfloor D/W\rfloorで入れるsetを分けた。

これらの高速化により見事6sec弱で動作するコードが得られ、AC……したのは午後10時43分だった。3分ちょっと間に合わず6完、20位。コードゴルフではAのdcがNibblesに負けており愕然。2回出現する100A0と書けるのは強いだろうと考えていたら、Nibblesではsaveとimplicit argにより1回しか出現していなかった。一方BはNibblesで勝ち。

C問題について、C++だとnext_permutationが重複を除いて列挙してくれることもあってかなり書きやすいが、一方スクリプト言語だとそもそもO(N!NK)をただ書くだけでは間に合わないらしい。コンテスト中もN\le 10はちょっと攻めているなと思っていた。

振り返りをしていたら午後11時半になったので、録画を止めずそのままCF #960 div.2に出た。

Dashboard - Codeforces Round 960 (Div. 2) - Codeforces

Aは奇数回出現する要素があれば先手勝ち、そうでなければ後手勝ち。Bはy番目からx番目までを+1で埋めるのが良さそう。その前後は和が0に近いほうが嬉しく、またa_{y-1}=a_{x+1}=-1なので、そのまま\pm 1を交互に並べる方法が思い浮かび、実際に条件を満たしている。

Cは1回操作すると列が単調増加になる。以降は後ろにどんどんずれていくだけかと思ったら、1回しか出現しない要素はずれずに消えてしまうようだ。しかしこれも2回目の操作でしか発生しないので、そこだけ愚直に計算すればよい。

Dは基本的に1行につき1回の操作が必要で、a=0の行や「2以下の数」「4以下の数偶数個」「2以下の数」という区間に対して1回ずつ得していく。これをもとにdpすればよい。遷移時の条件チェックをミスして1WA。

EはHLDをベースに解いた。heavy pathの上で二分探索を行いどんどん下に降りていく。判定に失敗した場合は二分探索の区間を親のほうに一つ伸ばす必要があるため、幅2から減らない可能性があり、そのときは手で場合分けをする必要があった。またheavy pathから降りるために子を一つ一つ聞くときは、部分木が小さく絶対にいないと判断できる子を飛ばした。

クエリ回数を一切見積もっていなかったので、E2に投げてチェックしていた。最初は二分探索の場合分けパートを真面目にやっておらず、同じheavy pathの上で何度も二分探索を繰り返していたようだ。E1の制約なら通るんじゃないかという誘惑を振り払ってコードを修正したら、これまで落ちていたケースを通過。pretestが全部終わるまで待つ時間は残っていなかったので、その時点でE1にも提出した。

何とかE1・E2共に通り、ギリギリ5完で36位。

www.youtube.com

午前9時くらいになって、最近読んでいたなろう「眠れる王」を読了した。主人公が追放されたり迫害されたりしないクラス転移ものということで、これもハーメルンの捜索掲示板で見つけた。この作品では主人公がクラスのまとめ役となり、そのまま早々に立国までしてしまう。自分にとってはこの展開や、その後立派に王として活躍する主人公が大好物だった。非常に面白かった。

https://ncode.syosetu.com/n7449em/

そのまま続編「傍らに異世界は転がっている」も読了した。単体でも読めるようにしようとしたらしく、前作のキャラがあまり大っぴらに登場せず残念。この先出る予定はあったようだが、そこまで話がたどり着く前にエタってしまっている。

https://ncode.syosetu.com/n8115hh/

「眠れる王」が非常に好みだったので似た作品を探そうと捜索掲示板で検索をかけたが、クラス転移の系列で紹介されているものばかりで、「王」という要素に注目したものは残念ながら見つからなかった。この状況では、以前からそういうキーワードでいろいろ検索していたのに「眠れる王」が見つからなかったのも納得。

午前0時半ごろ就寝。

07/21(日)

午後4時に目覚ましで起きた。AHC035が始まってしまっている。あまりに眠く布団から出られなかったため、スマホコードゴルフだけして、30分ほどで二度寝した。

ALGO ARTIS Programming Contest 2024 Summer(AtCoder Heuristic Contest 035) - AtCoder

午後8時起床。シャワーを浴び、外出して油そばを食べ、ゲーセンで閉店まで遊んだ。今日は13クレプレイ。新曲の14+を端から触っていってAJ五つ、SSS+二つ、SSS一つを出した。どの譜面も数回程度しかプレイしていないのにポンポンとスコアが出て、自分が上手くなったかのような気分。

中でも初見プレイが上手かったものをツイートにまとめた。どれも譜面動画なら何度も見ていたが、まさか一発でこんなスコアが出るとは思わなかった。「《創造》 ~ Cries, beyond The End」はもう一度プレイしたらボロボロだったので、SSSは二度と出ないんじゃないだろうか。「オンソクデイズ!!」はこの次に2-1が出たので、まだ再現性がありそう。癖がついたら終わりではある。

ドンキに寄って帰宅。シャワーを浴びて朝方まで日記を書き、少しラノベを読んで午前9時半就寝。

今週はなろうに捧げた。来週からまた頑張ってラノベを読んでいきたい。

週記(2024/07/08-2024/07/14)

07/08(月)

午後3時過ぎ起床。半からインターン先定例会に出席した。進捗は……ない。

勉強会はサイバー攻撃の手法についての話だった。最近LockBit 2.0についてのブログを読んだのでタイムリー。攻撃先に共犯者がいれば物理的なアクセスによってサイバー攻撃を行いやすくなるが、LockBit 2.0はこの共犯者を募る文書を感染したPCの壁紙として設定するらしい。怖い話だ。

www.mbsd.jp

そのあとは先週の週記を書いていた。日付が変わる前に投稿。

ABC361-Fの最短コードを読むため、Nibblesの再帰関数の仕様を、Haskellにトランスパイルされた後のコードを眺めたりして何とか理解した。公式ドキュメントやテストとして書かれた例はちょっと不親切すぎ。まずこの演算子`;が四つ引数を取ることが分かっていなかった。順に呼び出し引数、継続条件、ベースケースにおける値、そしてメインの処理である。Quick Refにある例`; 5 $ 1 *@-$~$を例に取って見てみよう。

まず呼び出しの引数は5。つまりf(5)を計算している。そしてこれ以降再帰関数の引数に$でアクセスできるから、継続条件の$は引数がNibblesの評価で真、すなわち「引数が正」を表している。ベースケースの値は1。当然ここでも$が使える。そしてメインの処理では$が引数、@が関数本体となっていて、f(x-1)\times xを表す。確かに階乗を計算できている。

nibbles/Ops.hs at 62a912f5fead02162ccb77a9d4a553a180a7f685 · darrenks/nibbles · GitHub

atcoder.jp

ゴミ出ししてシャワーを浴び、午前5時頃布団に入った。

スマホを見たらTopCoderからメールが来ていた。現在のArenaが閉鎖されるらしい。それに伴ってSRMもしばらく開催されなくなる。メールではあくまで一時的な休止だと言っているが、最近のTopCoderのグダグダっぷりを見るに復活する可能性は低そうだ。それどころか過去問アーカイブもComing Soonのままずっと放置されるのではと思っている。

ラノベ「玄関前で顔の良すぎるダウナー系美少女を拾ったら」2巻を読了。1巻では退廃的な雰囲気を感じつつも、ラストの主人公とヒロインの和解を見て、そう悪い流れの話ではないんだなという印象を抱いた。そこからヒロインの家庭問題も円満に解決するだろうと考えていたのだが……とんでもない。この巻での決着は自分から見れば破局そのもの。ヒロインが主人公だけは特別に思っているからこそ、1巻のような結末に至れたらしい。

別のラノベを読み始め、いつの間にか寝落ちしていた。正確な時刻は不明だが午前8時以降で、もしかしたら午前9時を回っていたかもしれない。

07/09(火)

午後6時に目を覚まし、ゲーセンに行こうと考えつつもうっかり二度寝してしまった。次に起きたのは午後9時。まだギリギリ遊びに行けると判断し、即座に準備を整えて外出した。

腹ごしらえはせずゲーセンに直行し、閉店までに13クレプレイ。理論値狙いをしていたらありとあらゆるところで赤が出てしまい、捨てゲーを重ねた結果2時間もプレイできなかったのにこのクレ数になった。空腹なのが悪かったのだろうか。諦めて未プレイの14のAJ埋めをしたらまあまあまともなスコアが出たため、成果はゼロではない。また閉店間際に解禁した「colorful」は理論値が出せた。曲が非常に好み。

帰りに油そばを食べた。途轍もなくお腹が空いているから普段よりワンサイズ大きく、さらにトッピングをつけても余裕だろうと考えたが、終盤はギリギリだった。よく混ぜずに食べ始めてしまい、器の底にたまったタレの味の濃さにやられたという感覚。今後は念入りに混ぜることを心掛けたい。

ドンキに寄って帰宅。シャワーを浴びた後、布団に入ってラノベを読んだ。

「女友達は頼めば意外とヤらせてくれる」3巻を読了。新ヒロインはあまりにもボーイッシュすぎて、女の子らしさがギャップではなく違和感に思えた。好みでない。以上!

午前5時くらいに寝落ちした。

07/10(水)

午前7時に目を覚まし、ラノベを読んでいた。

「女友達は頼めば意外とヤらせてくれる」4巻を読了。ヤンデレは勘弁してくれ!確かどこかのサイトで4巻だけ年齢制限がかかっていた気がするが、もしかしたら性的描写が過剰すぎたのではなく監禁パートが引っ掛かったのかもしれない。こんな重い話は辛いな、と思いつつ読み進めていたら、ヒロインの承認欲求を主人公の絶倫さで満たして手早く解決してしまった。絶倫さがちゃんと意味のある設定になっていて、ちょっと面白かったし感心した。

午後1時に「にじさんじ甲子園2024」の開催がアナウンスされた。PVを見ると主催に活動休止中の舞元啓介さんも名を連ねていて仰天。ついに復活されるらしい。

寝落ちして起きたら午後8時になっていた。またラノベを読んだ。

「ギャルに優しいオタク君」2巻を読了。主人公・オタク君のギャルに対する優しさとは、彼の持つネイル・メイク・ヘアアレンジ技術だったはずだが、この巻ではほとんど取り扱いがなく残念。1巻で仲良くなったヒロインのギャルがオタク君の趣味を理解しようとする一方だった。そういう展開だと個人的には気まずさや手間を取らせる申し訳なさが勝ってしまう。いたたまれない気持ちになりながら読んでいた。

あーだこーだーでABCの賞品に関する話が出たらしい。どうやら公式として飛び賞を推奨する方針となったようだ。理由を理解できないわけではないが、それはそれとして個人的には残念に思ってしまう。まあ昔のスポンサードが滅多になかった時代に戻ったということで。

今後のABCは分かっている限り賞品がすべて飛び賞になっている。もしかしたらこれが最後の順位賞だったかもしれないと思うと非常に残念。

週記(2024/07/01-2024/07/07) - kotatsugameの日記

www.youtube.com

「純情ギャルと不器用マッチョの恋は焦れったい」を読了。こういうラブコメの友人キャラといえば、恋に悩む主人公・ヒロインに適切な助言を与える「良い奴」だが、この作品だとその印象は薄い。特に中盤あたりの友人同士の衝突が原因であまり好きになれなかった。一方主人公とヒロインはどちらも非常に好感の持てる言動で、見ていて気持ちよかった。もしかしたら彼らを基準にして友人を評価した結果このようになったのかもしれない。

午後11時半からCodechef Starters 142に出た。

https://www.codechef.com/START142A

書く

日記を書いて午前4時就寝。

07/11(木)

午後0時半起床。今週のセミナーはお休みである。

午後1時から1on1に臨んだ。3月末以来である。新年度はしばらく学業の様子を見たい、と言ったまま特に連絡を取らなかった結果このような事態に陥った。近況報告を行い、今後のタスクについて話し合って1時間で終了。今後また定期的な1on1を復活させていくことになりそう。

久しぶりに社会的な話をしたので疲れ果て、布団に戻ってラノベを開いた。午後5時前から3時間ちょっとの寝落ちを挟んで読み続け、午後11時になって布団を脱出。シャワーを浴びて半からCF #957 div.3に参加した。

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

書く

www.youtube.com

ラノベを2冊読了。

1冊目、「悪役御曹司の勘違い聖者生活」3巻。敵に捕らわれたヒロインを主人公が助けに来る王道の展開。勘違い要素はほとんどなく、あってもこの展開には一切関わらない。主人公が自ら行動を起こし、強大な敵に立ち向かって勝利するというストレートなかっこ良さで、好みだった。そしてついに「聖者」という称号が授けられてタイトル回収。しかし主人公に聖なるものという印象はないので、ちょっと違和感。

2冊目、「やり直し悪徳領主は反省しない!」。主人公の内心考えていることが言動に表れないタイプの勘違いもの。無難なセリフにかっこ書きで内心の描写が差し挟まれるため非常に分かりやすかった。主人公に命の危機が迫ると、オートモードのようになって圧倒的な武力を発揮するらしい。この設定もそれはそれで悪くないかも。通常時の目の色は青でオートモードだと赤になる、という設定がカラーイラストでも丁寧に表現されていた。

しばらくネット小説を漁って午前8時半就寝。

07/12(金)

正午起床。急いで食事し半からのWTF2024に備えていたが、オンサイト会場のネットワークトラブルでこどふぉった。正確な開始時刻が未定だったため大学生協にも行けない。

待つ間にハーメルンの「すくつ廃人が少女をすくつに潜れるようになるまで鍛え上げるお話」を読了。面白かった。Elona原作だとよく地の文が「あなたは○○だ」一辺倒になるが、この作品は普通の小説のような言葉遣いがなされていた。それでいて世界観は完全にElonaだったのでなかなか新感覚。

syosetu.org

WTF2024は75分遅れの午後1時45分に開始した。動画は撮影しなかったが、こどふぉったのが原因ではない。もともとそう決めていた。

World Tour Finals 2024(Open Contest) - AtCoder

Aは大変だった。オンサイトのほうで開始5分でFAが出たのを見て、綺麗で簡潔な解法があるのだろうとわかっていたのだけは救いか。とんでもない実装になりそうな方針を避けつつ何度も考え直していたら何とか当たりが引けた。

とりあえず選ぶスライムは端に寄っているほうが嬉しそう。実験して正しさを確かめた。実は三分探索できるのではないかとも考えたが、これは正しくなかった。

実験コードを書いているとき、隣接する重さaと重さbのスライムが速さa+bで相対的に近づいていくことに気づいたため、今度はこれを発展させようと考えてみた。各スライムの間の距離がすべて0になるまでの時間を求めたり、両端のスライムがどれくらい近づくかをこの速さの和で捉えたり。

残念ながらこれらは全くうまくいかなかった。後者については両端のスライムの重さが重要となるため、その変化をすべてのprefix/suffixについて差分更新で求め、うまくマージできないかと思ったが、明らかに実装が爆発するため棄却できた。

ここでようやく、スライムの重心が変化しないことに気づいた。全体として変化しないだけでなく、適当な部分集合を取っても似たことが言えて、その中で合体し続ける限りは重心が一定速度で動き続ける。そこで、スライムを左右に分け、二つの群体それぞれについて全体の重心の位置に到達するまでの時間を考えてみることにした。

スライムはもともと全体のprefixとsuffixから合計K匹取っているから、分割もそれを用いるのが自然。しかし計算してみると、愚直と合ったり合わなかったりする。分け方をいろいろ弄ってみてもこの状況は変わらなかった。

ただ、この解法のシンプルさはかなりそれっぽい。諦めずにガチャガチャしていたら、K匹の取り方すべての中での最大値は合っていることが分かった。最適でない取り方をした場合だけずれてしまっていたらしい。またN=Kのときもなぜか合わなかったので、これはO(K\log K)に高速化してあった愚直を用いることにして、恐る恐る投げたら通った。

なんと4時間かけてしまったらしい。次にBを読むも、何もピンとくるものがない。諦めて大学生協に行ったら、移動中に一つそれっぽい解法を思いついたので、慌てて帰宅して即座に実装に入った。

各ペアがswapされる確率を求め、足し合わせたい。10のペアについて、S1より左にある別の1の個数をlS0より右にある別の0の個数をrとしたときに\frac{1}{l+r+1}になると考えた。

愚直を書くと……合わない!残念!今度こそ諦め、もう一度外出してATMに行ってきたらコンテストが終了した。Openでの順位は50位。Bは\frac{1}{\max(l,r)+1}としていたら正解だったらしい。正直惜しくも何ともない。

ラノベを読み、午後9時からyukicoder 436に出た。

yukicoder contest 436 ('09 Contest 002 day1) - yukicoder

書く

Amazonの定期おトク便の支払い方法に問題があるとメールが来た。これまでは代引きを指定し、アマギフ残高から優先的に支払わせていたが、代引きが指定できなくなったのでこういうことになったようだ。代わりの選択肢はクレカ・デビットカードしかないものの、持っていないので不可能。どうしようもないので、困ったら手動で買うことにしてとりあえず放置。

「俺は義妹に嘘をつく」を読了した。生協で間違えて買ったラノベの1巻。ラブコメディと言いつつなかなか重そうな設定だし、マッチングアプリから始まるストーリーは最近よく見るものの全く興味が惹かれないし、ということでこういうイベントでもなければ手に取らなかったであろう一冊。タイミングを逃すと絶対に積むだろうと思って、夕方に受け取ってきて早速読んだ。

読んでみるとラノベというより一般小説のような感じでしっかりしており、面白くないなと思うことはなかった。はっきり面白いと言い切れないのはその設定・ストーリーの重さによるもの。思っていた数倍で、早く逃れたいとページをめくる手が速まった。あとは、別にマッチングアプリを導入として使う必要はなかったのでは、と思う。

午前2時半ごろ寝落ち。

07/13(土)

午前7時起床。「俺は義妹に嘘をつく」2巻を読了した。地元を離れて山奥の集落で住み込みで働く夏休みの話。恋愛パートがほとんどを占めており、ようやくラブコメらしくなってきたな、という感じ。ただし通話で一瞬だけ登場した母親とのいざこざがピリリと効いて、主人公とその義妹が置かれた状況を実感させてくる。そこ以外は面白かった。

しばらくなろうを読んで午前10時にまた寝落ち。起きたら午後6時半だった。今日のUniversal CupはUTPC2023セットだったため不参加。コンテストまで布団でなろうを読み続けていた。

シャワーを浴びて午後9時からABC362。

Toyota Programming Contest 2024#7(AtCoder Beginner Contest 362) - AtCoder

Aは面倒。頑張って場合分け。Bは内積を3通り計算する。Cは\sum Lからインクリメントして達成する。Dは頂点倍加。Eは適当にdpしたらO(N^5)になったが、A=(1,\dots,1)で爆速だったので出した。

Fは前回のUCでカクタスグラフ・構築なしの問題が出題され、その時にdfs順で並べてN/2個おきにペアを作ると上界が達成可能だと聞いていた。しかしNが奇数のときがよくわからない。まあ重心を抜いておけばOKかなと思って適当に出したら通った。

GはSuffix Arrayで頑張る。頑張らなくても自分のライブラリにあったらしいが覚えていなかった。

全完、EFGでそれぞれ手間取って10分ずつかけたのが響いて17位。Fは改めて重心に注目して考えると示せた。Nが奇数のとき、重心を取り除いても上界は変わらず達成可能となっている。コードゴルフはAとBをNibblesで書いて、Aはボロ負け。

www.youtube.com

なろうを読みつつ少しだけ数値計算を行った。適当に試したアイディアがうまくハマって進展があったかと思ったものの、完全にはうまくいかなかった。

午前9時前、トランプ前米大統領が演説中に銃撃された。まずその瞬間の動画が速報で流れてきて、少しすると1枚の写真が急激に拡散され始めた。そのあまりにも完璧な構図は一目見るともう忘れられないもの。そう思ったのは自分だけではないようで、その後この写真は、事件の話題性に加えて写真の完成度の点でも注目されているようである。

apnews.com

数値計算の結果をまとめて関係者にメールし、午後2時半就寝。

07/14(日)

午後6時半起床。コンテストが何もない日なのでゲーセンに行く。腹ごしらえは、立ち食い蕎麦屋が休みの日だったのでやよい軒にした。

今日は閉店まで18クレプレイした。まず火曜日に理論値狙いをしていた2譜面を改めて詰め、無事達成。どうやら空腹でダメだったのではなく単に譜面が苦手だったらしい。「匿名M」は手を交差して2連打するのが難しい。しかし「おくすり飲んで寝よう」でありえないくらいドブった原因は不明。今日もいたるところで赤が出て大変だった。

また今日の主目的であった、8キャラクター合計108Lv.を要求するクエストをクリアした。今週木曜日までだったので何とか間に合ったと一安心。

そのあとは14+をプレイしていた。一発目だけ上手くて後はボロボロ、ということが何度かあった。そんな中でもAiolosはSSS+まで伸ばせて良かった。自分でやっていてもなぜ押せているのかわからない箇所だらけなので、まずAJは無理だし、次ゲーセンに来た時にはもうできなくなっているのではないか。

帰りはホスフィンに教えてもらった新しくできたラーメン屋で食事した。普通サイズが麺2玉で、洗面器みたいな器で出てきてひっくり返りそうになった。周りの客はみな少なめの麺1玉を頼んでおり、じゃあそれを普通サイズにしようぜと言いたくなる。満腹中枢が反応する前に慌てて啜りこんだ。

ドンキに寄って午前1時過ぎ帰宅。眠気から床で寝落ちしたらしい。気づいたら午前3時だった。

シャワーを浴びて昨日の数値計算の続き。メールの返信に書かれていたことを試していた。実行が全然終わらないのでSageMathの中身を確認しに行ったが、少し辿るとSingularに飛ばされてよくわからなくなった。しかし終わらないのは確か。無理でした、とメールを送った。

日記を書いて午前11時過ぎに就寝。

今週はほとんど予定がなく、平日はずっとラノベを読んでいた。週末は久しぶりになろうに熱中した。460話あるが文字数としては100万文字なのですぐ終わるだろうと手を付けた。実際もう3分の2まで来ている。

週記(2024/07/01-2024/07/07)

07/01(月)

午後3時起床。少しだけインターン関連で調べ物をして、半から定例会に出席した。進捗報告では調べている内容について述べた。

勉強会は「同時手番ゲーム」の話。プレイヤーが同時に行動するだけで完全情報ゲームでなくなるというのは、言われてみれば当たり前だが意識したことがなかった。具体的なゲームとして、最近テレビ番組で企画されたらしい「電気椅子ゲーム」が紹介された。勝ち・負けのゼロサムゲームという扱いだったが、よく聞くと勝ち方によって賞金額が変わるらしい。そこを突き詰めたら戦略はどう変わるのだろうか。

先週のラノベ取り違えの件で、解散後に大学生協に行った。正しいラノベを購入し、預けてあった間違えて買ったラノベも引き取って、これにて解決。他の客に迷惑をかけるようなことがなくてよかった。

学食で「にんにく油そば」を食べた。前から気になっていてようやく出会えた期間限定メニューだが、タレが少ないため素の中華麺の味が目立ち、美味しくなかった。

帰宅後は先週の週記を書き進め、日付が変わる前に投稿。直後に6月の読書記録をまとめてツイートした。先月は頑張って読んでいたし、買った本も少なかったので、久しぶりに積読の増分が負となった。調べたら2022年11月以来だったようだ。ただ買った本が少なかったのは、6月末に発売されたラノベをまだ注文していないから。よって7月分にしわ寄せが行く。

しばらく週記に追記した後、ラノベの新刊チェックを行った。KADOKAWA関係の出版社のサイトは落ちているし、hontoだとなぜか発売前の新刊が登録されていないしで、内容を知るには一冊一冊個別に調べるしかないかもと億劫になっていたが、Amazonであらすじを読むことができた。6月末から7月末にかけて発売される本を中心に合計37冊を予約・注文。先週間違えて買った「俺は義妹に嘘をつく」2巻についても、1巻を注文しておいた。

そのままの勢いで、以前から気になっていた書画カメラをAmazonで注文した。撮影範囲の十分な広さ、カメラの十分な高さを追い求めると3万円弱する製品に行きつき、下手にケチって失敗するよりはと思ってそれに決めた。やはり店頭で実物が見られないのは不便。まあ買ったのだし後は届いてからのお楽しみ。木曜日到着予定なので、今週末のコンテストから使えるだろう。

ヨドバシカメラには書画カメラを探しに来た。これは主に本などの紙資料を映すカメラで、競プロ動画の手元撮影にも便利そう。ただタイピングしたり手計算したりするだけの高さが確保できるか気になるので、実物を見に来たのだ。しかし残念ながら取り扱いがなかった。

週記(2024/06/17-2024/06/23) - kotatsugameの日記

TCB 2024/05回3位の商品でアマギフ2000円分が届いていた。

ハーメルンを開いたら、昔読んだ作品に1年ぶりの更新が来ていた。書籍化するらしい。タイトルをよく見たら、先ほどの新刊チェックで買うか迷って止めたラノベだった。ハーメルンで読んだ当時の評価は「微妙」だったから、買わなくて正解だったようだ。当時も今もタイトルで説明される設定に惹かれていた。そのあたりの好みはずっと変わっていない。

シャワーを浴びて少し論文に手を加え、ラノベを読んで午前10時半就寝。

07/02(火)

午後7時起床。ちょっと作業して先生からのメールに返信し、ゲーセンに行くため外出した。

立ち食いそばを食べ、午後8時過ぎから閉店までで19クレプレイ。バージョンアップで追加された新曲を埋めていた。バージョンアップの前後でレートが17.03→16.92と激減しておりびっくりした。よく覚えていないが直前に「sølips」を連奏していた気がしないでもないから、その定数変動が原因だろう。

新しいイベントのチュウニズムクエストが8キャラ合計で108Lv.とあまりに果てしないので、EXPストックチケットを使ってみた。wiki曰くEXP+70ptとのことで、どのくらい上昇するのかよくわかっていなかったが、なんと初めて使ったキャラが一撃でLv.最大まで成長し唖然。

ラーメンを食べ、日付が変わってから帰宅。疲れて床に横たわったらそのまま2時間ほど寝ていたらしい。

目を覚ましてからは朝までかけてハーメルンの「四葉真夜と七草弘一の子供(非公式)ってハード過ぎない⁉︎」とその番外編を読了した。達也・深雪の見せ場を食ってしまうチートオリ主だが、「彼らを目立たせないように」という理由が用意されていたためか全く気にならず、純粋に活躍を楽しむことができた。面白い。

syosetu.org

syosetu.org

シャワーを浴びてしばらくセミナー準備をした後、今度はラノベを読了。「ただの村人の僕が、三百年前の暴君皇子に転生してしまいました」。

悪役に転生……というより憑依するタイプの話では、急に温厚になってもそれまで粗暴に振る舞ってきた事実は消えないという考えから、憑依前後の性格の激変がどうしても気になってしまう。この作品では、憑依前の評判を笠に着て使用人に圧力をかけ、皇宮での立場を確保するシーンがあって、なかなかいいなと思った。しかしこんな行動はそれっきりで、あとはナヨナヨした性格の主人公が残り残念。また、せっかく歴史を書き換えているのに婚約者を敵キャラに取られる正史がちょくちょく挟まれるのも好きではない。

ABC359の総合4位・学生3位の賞品でアマギフ40000円分が届いた。月曜日に書画カメラに使ったお金が3割増しで戻ってきた。

正午くらいに就寝。

07/03(水)

午後7時前に起床。今日はサークルの活動日。今からバチャに参加するつもりはないが、ICPC国内予選直前なので定例会自体には顔を出しておくべきだろうと考え、家を出た。学食で食事してから教室に向かい、バチャが終わったタイミングを見計らって話に混ざった。幸い特に困っていることはなさそう。

午後8時過ぎに帰宅。セミナー準備を完了させたらちょうど午後11時過ぎだったので、半からCodechef Starters 141に出た。

https://www.codechef.com/START141A

書く、DE upsolve

ラノベ「ただの村人の僕が、三百年前の暴君皇子に転生してしまいました」2巻を読了。学園編開幕。相変わらず評判は悪いままなので、交流がほとんど広がらない。それだけなら孤高という感じで良いが、「僕には君さえいれば……」と言わんばかりにずっと婚約者とイチャイチャしているのは気に食わなかった。孤高に過ごすならもっとストイックなキャラが好み。正史において婚約者を娶る敵キャラは、ずいぶん手ごわい雰囲気を出していたものの、急転直下の展開で早々に退場し驚いた。

シャワーを浴びて少しだけ日記を書き、午前8時過ぎ就寝。

07/04(木)

午後0時半起床。原付で登校し、購買でパンを買って教室に向かった。

午後1時半からセミナー。まず最近の数値計算の結果について報告し、1時間ほど議論した。その後通常の発表へ。時間が残り少ないので手短にと思っていたものの、結局全部説明してしまうし、さらに今日は黒板の使い方も下手くそだった。重要な式を書いて、それを参照しながら説明しようとしたのだが、式が思ったより長くて黒板の「上半分」を占拠してしまうような形に。周りの空きスペースでちまちま計算したり板書したりするのは良くなかった。

解散後は院生室に寄り、オープンキャンパスで発表する内容について聞いていた。グリーン・タオの定理を実演するため、長さを指定して素数列からその長さの等差数列を見つけてくるプログラムを書きたいらしい。素数の列挙は簡単だが等差数列の発見はおそらく難しく、そこがボトルネックとなって小さい範囲でしか計算できないだろうと伝えた。

学食には行かず午後6時くらいに帰宅。荷物を下ろして身軽になると再度登校し、川内の大学生協ラノベを受け取った。今度こそ学食で食事して帰宅。

Amazonから書画カメラが届いていた。撮影範囲は微妙に足りないかもしれない。高さは十分。

グダグダとネットサーフィンで時間を浪費してしまったが、気合いを入れてシャワーを浴び、午後10時からYouTubeで配信を行った。新しいカメラを使ってみる。

www.youtube.com

配信ではUC Semifinals直後で参加しなかったCF #954 div.3を解いた。

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

Aは中央値。もちろん全探索してもよい。Bは数値の大小関係が逆転しないので、四方の値の最大値までデクリメントすることになる。Cはindの重複を除いてソートし、そこにcの文字を順に入れていく。Dは演算子を入れない位置を全探索して数列に直し、dp。

Eは\bmod kで分類し、ソートして隣り合う要素をペアにする。分類して奇数個あったグループものについてはどれを残すか全探索。Fはコンテスト当時のTLで解法を見てしまったが、それがなくてもさすがに解けたとは思う。2辺連結成分分解すれば終わり。

Gは難しめ。(i,p_i)というペアに直し、\gcd(i,p_i)で割って互いに素にしておく。ペアの順序対( (a,b),(c,d) )であってa\mid dかつc\mid bなるものを数える。aを固定すると、a\mid dなら元の数列でもa\mid pが成立するため、(c,d)の個数は高々N/a個。k=1\dots N/cについて\mathrm{arr}[kc]\leftarrow\mathrm{arr}[kc]+1としておくと\mathrm{arr}[b]が求める数になっている。

そのまま出すとTLEした。c=1が大量に発生するとまずいようだ。倍数のカウント時に同じcをまとめて置いたらG1は171ms、そのままG2に投げてみたら2608msで通った。計算量の保証はないような気がしている。

配信後、気になった点の改善を行った。まずカメラの小刻みにズームを繰り返す挙動については、OBSで焦点の自動調整をオフにしてみた。また振り返り時に使うホワイトボードアプリとして、おすすめされたMicrosoft Whiteboardを入れてみた。WordやExcelのようにマイクロソフトのアカウント名が丸見えになるかと思ったらそんなことはなく、非常にいい感じ。

第五回日本最強プログラマー学生選手権の案内が来ていたので、後泊用のホテルを取った。土曜夜だからめちゃくちゃ高い。クレカ払いなら1割ほど安くなるらしく、確か以前親のクレカを使わせてもらったこともあるが、今回はもういいやと思って割高の値段で予約を入れた。

ラノベ「推しにささげるダンジョングルメ」2巻を読了。1巻に引き続いてのダンジョングルメ要素に加え、この巻ではダンジョン動画を投稿し、そのあまりの超越者っぷりで世間の度肝を抜いた。これらのシーンは非常に好みで面白かった。一方、主人公の金持ちアピールに関する些細な描写だが、TCGの絶版パックを買い集めて剥こうとするのが好きになれなかった。ポンと不動産を購入するのはむしろ爽快だったので、おそらく取り返しがつかないのが嫌だったのだと思う。

そういえば、この巻には特典小説の読めるリンクがついている。KADOKAWAのサイトが落ちているのにどうするんだろうと思いながらQRコードを読み込んだら、カクヨムの下書き共有ページに飛ばされた。なかなか頑張っている。

なかなか眠れず、布団に転がってスマホを触っていた。午前9時くらいにようやく寝落ち。明日は夕方からICPC国内予選である。

07/05(金)

サークルとしての集合時刻は午後2時ということで、午後1時から2時にかけて15分おきに目覚ましをかけていたが、毎回二度寝してしまい無事貫通。目を覚ますと午後2時40分くらいだった。まあコーチとしての仕事はコンテスト開始直後の問題文配布くらいしかないので、それまでに到着できればOKという説もある。学食で昼食を摂ってからゆっくり向かった。

午後3時半くらいに会場に到着。皆リハーサルを終え、コンテスト前の微妙な時間を過ごしていた。自分のアイコンを掲げているチームが2チームあって動揺。

選手とはそれほど話さず、もう一人のコーチ・milkcoffeeさんや監督員になってくださったサークル顧問の先生とコンテスト開始直後の問題文印刷について打ち合わせをした後は、じっと座って待っていた。午後4時半にコンテスト開始。部屋を歩き回って問題文を配り切ったらお役御免である。

コンテスト中は持ってきた本を読もうと考えていたが、問題文が公開されたら自然と考え始めてしまい、結局1ページも進まなかった。

書く

コンテスト後しばらくして解散。サークル全体での打ち上げとしては後日BBQを企画するらしい。それとは別に今日、残っていた8人で飲みに行くことになった。自分は原付で登校したので、いったん自宅に戻って置いてきた。

会計はうっかり完全割り勘になってしまった。ここはコーチが多めに出すべきところ。BBQの際は忘れないようにしよう。まだゲーセンが開いていたので駆け込みで2クレだけプレイし、帰宅。

シャワーを浴びた後は数値計算を回していた。午前4時くらいにうっかりPCの前で少し寝てしまい、今日はもう無理だろうということで布団に移動したが、ゴロゴロしていたら目が覚めてきたのでまたPCの前に戻って作業を続けた。午前9時くらいに計算結果をまとめ終えてメールで送信。布団に戻ってラノベを開いた。

社畜剣聖、配信者になる」2巻を読了。相変わらずギャグテイストで軽く読める。ひょうきんな新キャラも、主人公が常にスーツ姿なことに関する設定も良かった。主人公の力の底が見えない。ホイホイ読み進めていたらギルドを設立したりヒロイン3人を全員娶ったりしてびっくりした。

正午、就寝。

07/06(土)

午後8時半起床。午後9時からABC361に出た。

Denso Create Programming Contest 2024(AtCoder Beginner Contest 361) - AtCoder

AはK=0がないのが嬉しい。入力をそのまま出力しつつ、適切な箇所でXを挟む。Bは次元ごとに分解してチェック。問題文を真面目に読むのは難しかったので雰囲気で解釈した。ちなみに、コンテスト中は問題名からrが抜け「Intesection of Cuboids」になっていたが、この日記を書いている月曜日に確認したら直っていた。

Cはほぼ自明。N-K個残すと考えると扱いやすいかも。Dは適当に探索。馬鹿正直にbit表現に直してしまったが、文字列のまま持ってもよいくらいの状態数だったようだ。Eはドドドドドドドドドドドドドドドド典型。Fはb=2,\dots,59に対し\lfloor N^{1/b}\rfloor-1を求め、約数包除して最後にx=1を足す。b-th rootは二分探索。ライブラリを拾ってこようか迷いつつも頑張って書いた。

Gは石の連結成分を見ても平面走査しても実装が爆発しそう。しかし順位表を確認するともう全完が出ている。簡単な方法があると信じて考えたら良い方針が見つかった。石のない領域を横幅1の長方形で区切ると、その数は合計で[tex;O(N+\max X)]になるから、連結性をUFで管理し外と非連結なものだけ取り出す。平面走査の走査しない版とでも言えるだろうか。

39分でノーペナ全完、5位。上に日本人学生がちょうど3人いたため賞品の逆ボーダーとなってしまった。4位との時間差はかなり大きいのでどうしようもない。今後のABCは分かっている限り賞品がすべて飛び賞になっている。もしかしたらこれが最後の順位賞だったかもしれないと思うと非常に残念。

コードゴルフはCまでNibblesで解いておいた。AとCは負け。入力が2行あるとき、プログラムの最初に;;$を置いてImplicit Opsによるfoldl1を発動し、@$でアクセスするのが短いようだ。これまでもたまに負けているのを見たことがある。今日のAとCの最短コードは両方このテクが使われていた。

Tutorial: Minutiae

www.youtube.com

相変わらずカメラが小刻みにズームを繰り返している。公式のソフトを入れたりしていろいろ試してみたものの、結局この挙動を抑制するのは無理そうという結論に至った。またカメラの周囲についた照明も、反射が強くて白飛びしてしまうか、露出補正でプラマイゼロになってしまうかであまり役に立たなかった。いろいろ残念。ただしカメラの接続が安定しており、アーム付きであるという点だけでも非常にやりやすくはなった。

本を読んでいた。「父娘のおいしい食卓」を読了。面白かった。父が輸入食品の凄腕バイヤーであるという設定に惹かれて購入したので、その有能さがたっぷり描かれていて嬉しかった。また娘がかなりしっかり者で、父とのすれ違いにおいてもわがままを原因とするなどの理不尽な点がなく読みやすかった。父と娘がバランス良く双方向に歩み寄っているところが良い。

食事した後、新しいラノベを開く前に寝落ちしたようだ。午前5時頃。

07/07(日)

正午くらいに目を覚ました。今日のコンテストは夜中にCFがあるのみなので、二度寝せずゲーセンに行こうと考え、とりあえずシャワーを浴びた。しかしまだゲーセンに行くには早い気がしたのでラノベを開いた。

「一生働きたくない俺が、クラスメイトの大人気アイドルに懐かれたら」6巻を読了。面白かった。体調を崩した主人公をヒロインたちが順番に看病する話をメインに、前後をちょっとしたイベントで埋めた、トラブルも何もないひたすら甘い巻。ラストでは、前から予告していた武道館ライブを待たずして主人公とヒロインたちの関係について結論が出た。といってもまだくっつかないことを決めたという意味。ハーレム展開は続けば続くだけおいしいので、素直に嬉しい。今後も楽しみ。

そういえば、5巻を読んだときに以下のような心配をしていた。結局6巻は4か月で出たし、あとがきの締めの言葉も「また次巻で~」になっていたので、ひとまずは安心してよさそう。

あとがきを読むと6巻の刊行が確定していないような書き方で、4巻と5巻の間もちょっと長かったし心配。5巻まで出ていてそんなことあるか?続きが読めることを願う。

週記(2024/02/19-2024/02/25) - kotatsugameの日記

午後5時を回ってしまった。本当はあと1、2時間早く出たかったが過ぎてしまったものはしょうがない。地下鉄で街に出て、まず大戸屋で夕食を摂った。夕食時でも思いのほか空いていて助かる。

午後7時から3時間半ほどゲーセンにいて、22クレプレイした。まだまだ新曲埋めは終わらない。

「熱異常」の初プレイで1落ちが出た。譜面は確認していたし、tatyamさんが初見理論値を出したリザルトも見ていたので、ワンチャンあるのではと思ったが、やはりラストが難しい。この後10回以上プレイしてみても、理論値通過は1回あったかなかったか。残念ながら今日は揃わず。ちなみにまだ14の理論値は持っていない。

「ヒュブリスの頂に聳えるのは」のAJが出た。火曜日帰り際に2連続で1-0が出るも時間切れ。金曜日はボロボロだったから初日だけ上手いやつかと思ったが、何とか出てくれた。ただし赤が10個くらい増えてしまった。

8キャラ合計108Lv.を要求するチュウニズムクエストが一つ終わった。ちなみに現在進行中のイベントはもう二つあり、片方は同じく8キャラ合計108Lv.で07/17まで、もう片方は6キャラ合計87Lv.で08/07まで。前者を諦めてしまおうかとも考えたが、とりあえず進めてみている。

午後11時過ぎ、急ぎ足で帰宅。ササッとシャワーを浴びて半からCF #956 div.2に出た。

Dashboard - Codeforces Round #956 (Div. 2) and ByteRace 2024 - Codeforces

Aはギャグで、a_j:=j。Bは2x2の操作だけでよいので左上から操作して全部0にできるか見た。行和\bmod 3・列和\bmod 3が不変量だったらしい。Cは3人の区間の順番を全探索。左の人は条件を満たす最も短いprefixを取るべきで、右も同様にし、真ん中の人が条件を満たせるかチェックする。Dは幅1のみなら転倒数の偶奇で、一般のケースでも任意のswapが奇数回の幅1のswapに帰着できることから正当。

Eはボールに書かれた値の平均値を取っておき、specialかそうでないかだけで区別する。specialでないボールが出現する度手番が交代することから、どのタイミングで取ればどちらの得点になるかが一意。先手が何個specialなボールを取るか全探索し、そのようなシチュエーションの確率を重複組み合わせで求めた。

Fは解を二分探索。rを固定するとlが減少するにつれvalueも減少するので、二分探索で決めた閾値を下回るタイミングのll_rとおく。するとl_rl_{r-1}と一致するか、あるいはa_r\oplus a_iとのXORが閾値を下回る最大のi\lt r。後者はbinary trieを1点更新区間MINのセグ木っぽく使うことで求まる。O(n(\log a)^2)

Gは間に合わず6完12位。コンテスト後にしばらく格闘して通した。

a_{p_i}\oplus iは高々19bit。そこで下位B:=10bitと上位19-Bbitに分けて求めることにした。下位については2^B状態持って根からの累積和っぽいことをすると求まる。メモリが足りないので、取得する値をあらかじめ列挙し、累積和自体は同じ配列を書き換え続ける。上位はk=B\dots 18についてパスを長さ2^k区間に分割し、akbit目の累積和を見ながら算数した。

下位パートは累積和がO(n2^B)、取得がO(q)。上位パートはそれぞれのkについて累積和がO(n)、取得がO(q\times n/2^k)となり合計でもO(nq/2^B)LCAの計算などで生配列を使うようにしたら、2936msで通った。

www.youtube.com

日記を書いて午前10時就寝。

週記(2024/06/24-2024/06/30)

06/24(月)

午後3時過ぎ起床。昨夜開催されたUniversal Cup Semifinalsの順位表凍結が解除されており、我々のチームは全体10位・Finals未進出チーム内6位だった。8位までは確実にFinalsへ行けるはずだから、これはもう確定と言っていいだろう。やった!!!ちなみに決勝がいつどこで行われるかについては、まだ一切のアナウンスがない。

The 2nd Universal Cup Semifinals - Standings - Contest - Universal Cup Judging System

午後3時半からインターン先定例会に出席。進捗がないので、やろうとしていることを具体的に書いてお茶を濁した。勉強会は時系列データの圧縮アルゴリズムについて。時系列データは例えば一定時間ごとに取得されたりしており、差分を取るとほぼ定数、かつ値もあまり大きくならない。それを活用すると高い圧縮率が実現できるようだ。bitに詰め込んだり、差分のさらに差分を取ったりしていた。

解散後は大学生協ラノベを受け取り、夕食。帰宅してからはずっと先週の週記を書いていた。普段はUCまで手が回っていないが、今回は時間に少し余裕があったし、Semifinalsという特別な大会なのでちゃんと書くことにした。日付が変わる直前に投稿。その後しばらく追記してUCについては完成させ、灘の有志コンだけ穴あきで残っている状態となった。

ラノベ冒険者酒場の料理人」を読了。面白かった。迷宮産の素材を試行錯誤して調理していく過程は丁寧さとテンポの良さが両立していて小気味よい。また合間合間に描かれる街や酒場の様子は人情味があって、味わい深かった。異世界での日常を描くという点で「バスタード・ソードマン」を思い浮かべたが、こちらは主人公が貧弱なため少しヒヤヒヤする場面がある。しばらくすると戦闘力がヒロインに外注されて一安心。

午前9時就寝。明日は午後1時からホスフィンと二人で集まり、進捗を産む会を開催する。

06/25(火)

午後1時起床。遅刻である。曇り空が怪しかったので地下鉄で登校し、さらに学食で食事していたら最終的には1時間遅れでの到着になってしまった。

夜までずっと集中講義の課題に取り組んでいた。5月末に受講したものだが案外記憶が残っていて助かった。課題は10問ある演習問題をできるだけ解いてレポートにせよというもの。講義に最後の最後までついていけたこともあってか、問題はこれまで受講した集中講義に比べると非常に簡単に感じた。ただ時間はかなりかかって、これだけで一日が終わってしまった。

ホスフィンに無職転生第2期の22話を見せてもらった。なろうで読んだ時の記憶がはっきり残っているわけではないが、再会できそうでギリギリできなかったこのタイミングの悪さが非常に辛かったことを思い出した。そのまま23話の冒頭もチラ見。昨日TLに流れてきたイラストが記憶に焼き付いていたので、そのセリフを確認した。

明日は午後5時から集まることにして午後11時過ぎ帰宅。半からCF #955 div.2に出た。

Dashboard - Codeforces Round 955 (Div. 2, with prizes from NEAR!) - Codeforces

Aは逆転が起こらなければよい。Bはyで割れるまでインクリメントするのをまとめて行うと、\log_y x回くらいでx=1になり、そこからはループする。Cはlをギリギリ超えるだけ取るか1枚だけ取るのを考えればよい。後ろからdpしたが前から貪欲でよかったらしい。

Dは冠雪している・していないで高さに\pm 1を掛け、足し合わせて0にしたい。操作範囲の符号を集計すると総和をどれだけずらせるかわかるから、可能な操作に対して求めたそれらの\gcdが最初の総和を割り切ればよい。

Eは区間内でpopcountが最も大きな数を考える。l\lt rならlにおいてl\oplus rのMSBより下のbitをすべて立てた数、もしくはrのみが候補。このときMSBより上にはあまり興味がないから、その部分の情報はpopcountだけ持つことで桁dpで数え上げられるようになる。

Fは大変。ソートしなくてよいprefix/suffixを求める。列をreverseすることによりprefixだけ考えれば十分。列の要素がdistinctならば、あるべき位置に存在しない最小値を求め、それ未満の数がいくつあるか数えることによって達成される。ここで求める最小値は、列において直前の要素より小さい値の最小値として特徴付けられるから、これを管理した。distinctでない場合もインデックスとペアにして考えればよい。

\log一つだが定数倍が重く、pretextで2200msと少し不安だった。2300msに伸びつつも何とかシステスを通過してくれて、全完9位。

www.youtube.com

日記を書いて午前7時就寝。

06/26(水)

午後5時起床。また集合予定時刻に起きてしまった。天気が良かったので昨日とは違って原付を使えたが、代わりにガソリンスタンドに寄ったため相変わらず1時間遅れでの到着となった。数日前に夏至を迎えてこの時間でも非常に明るく、まるで昼下がりのよう。

今日は先週書いて動かした実験コードが正しいか検証していた。本当は手計算と比較するつもりだったが、それが可能なサイズではあまり情報が得られない。とりあえず文献に載っていた例をいくつか試し、正しい結果が出ていることは確認した。また午後10時くらいからはセミナーで読んでいる論文の行間を、ホスフィンにも考えてもらって埋めた。

夜中のCFもないし終電も気にしなくていいしで日付が変わってからもしばらく話続け、午前1時半くらいに解散。コンビニに寄りつつ帰宅した。メールでABC355の賞品アマギフ15000円分が届いていた。

実験コードの話。デスクトップPCで動かしているとあっという間にメモリ使用量が増えていき、64GBあっても数時間で食い尽くされるため、進捗をファイルに書き出すようにして、起きては再開し帰宅しては再開しを繰り返す羽目になっていた。PythonあるいはJupyterの書き方が悪くて不要な変数が生きているものと思っていたが、今日ノートPCで実行してみると全く問題なく動いてびっくりした。環境の違いらしい。

手始めにバージョンを調べると、デスクトップPCのPythonが古いことが判明した。aptでは更新できず首を傾げたが、そもそもまだUbuntu 20.04にいるのが悪いようだ。ということでUbuntu 22.04へのアップグレードを開始。機械学習用に入れたNVIDIAドライバーの更新をしてからdo-release-upgradeを実行し、1時間ほど待っていたら何事もなく完了した。実はOSのバージョンアップをするのは初めてなので感動した。

同時にパッケージもバージョンアップされた結果、メモリをバカ食いするのは解消された。しかし、安心して実験を回していたら、今度はログ出力が100MB近く溜まってChromeが耐え切れなくなってしまった。これまでちょくちょく再起動していたので顕在化しなかったらしい。どうせ正しく動いているのでバッサリ全部取り除いて実行しなおした。

そんなことをしながらラノベを読み進め、午前8時就寝。

06/27(木)

午後0時半起床。原付で登校し、パンを買って食べて午後1時から後輩のセミナー。

今日は結構詰まって大変そうだった。教科書で「簡単な」とか「明らかに」と言われている事実は、確かに感覚として明らかに見えるものも多い。しかし、では示してくださいと言われると途端によくわからなくなることは、まあなくはない。万全を期すなら準備段階で少し考えておきたいところではあった。あとは、そのような言葉はセミナー資料に書かないとか……。

午後3時からは後輩の院生室仲間を招き、自分の修論や最近の研究について説明した。知識が非常に広い人で、知らない分野との関連性を指摘された自分はタジタジになりつつ曖昧な顔をして頷いていた。興味はあるらしく、進展があったらまた聞かせてほしいと言ってくれたのは非常にありがたいこと。普段のセミナーに人を巻き込むのは難しいからいい機会だった。

セミナーは午後5時に終了。その後後輩と今日のセミナーで詰まった箇所について議論し、学食で夕食を摂った後はいつものように立ち話をして別れた。午後8時過ぎ帰宅。

ラノベ「最強守護者と叡智の魔導姫」を読了。表紙イラストを見て清楚なヒロインだと思っていたら冒頭から真逆の行動ばかりでびっくりした。明け透けに迫ってくるヒロインは苦手かもしれない。一方能力の強力さは好み。敵を倒す直前に遠隔で割り込まれ取り逃がしかけたところで、ヒロインが能力を使って隠れていた敵の名前を暴き、動揺させたのが特に良かった。安全圏にいる相手に一矢報いる展開は、直前までのフラストレーションが解消されて好きである。

午後11時半からはECR167に出た。

Dashboard - Educational Codeforces Round 167 (Rated for Div. 2) - Codeforces

Aはy\ge -1。Bはbの連続部分文字列であってaの部分列として取れる最も長いものを求めればよい。インクリメント忘れでマッチしたインデックスを使いまわしてしまう、部分列計算時の典型的なバグで1WA。

Cは(a,b)=(+1,+1),(-1,-1)をどう割り振るかが問題。個数を式で置いて計算したら、二分探索するまでもなく直接答えが出た。言われてみれば当たり前の上界たちのMIN。Dは作れる武器のうちa-bが最小のものを貪欲に作り続けるのがよい。\max a以上については作る武器が決まるので算数で求め、\max a以下はdpしておいた。

Eはaをランレングス圧縮した列を考えてみると、同じ値の連続区間はほとんどbから復元できる。唯一不可能なのがb=[\dots,1,1,\dots]で、長さ1の区間が二つあるのか長さ2の区間が一つあるのかわからない。よってこれは前者に固定することとした。最初と最後の区間も合わせ、f=x+x^3+x^4+\dotsとして求める値は[x^n](f+x^2)^2(f^{k-2}+f^{k-1}+\dots)。つい最近のTCBからFPS関連を拾ってきて通した。

Fは制約を、行と列のどちらを後から塗るかという制約に書き換え、そこから作った有向グラフの強連結成分ごとに操作していくことになる。つまりオフラインで辺の追加と強連結成分のサイズの取得ができればよい。ググって記事を見つけたはいいが読解に失敗し、実装できなかった。

My own algorithm — offline incremental strongly connected components in O(m*log(m)) - Codeforces

5完15位。Fはupsolveしておいた。分割していく時系列と考慮すべき辺が別物であるということに気づいておらず、持っている辺の前半だけ使ってSCCを計算してみるなど寝ぼけたことをしていた。SCCを計算するためには最初のほうからほとんどすべての辺を管理しておく必要がありそうだが、頂点の適切な圧縮によってdisjointに分けられ再帰していく様は見事。

www.youtube.com

動画をアップロードしたのち、公開作業をする前に布団に倒れこんで寝落ちした。午前3時半くらい。

06/28(金)

午後1時に目を覚ました。今日は床屋とゲーセンに行きたいが、とりあえず寝そべったままラノベを開いた。

「魔法警察ファンシー☆マリリン」を読了。ヒロインが魔法でフーダニットだけ行い、主人公が推理でハウダニットを補足するミステリ。それをかなりラノベに近づけたようなものだと思った。一つ一つの事件が非常にスピーディに解決していく。容疑者や証拠はほとんど最初から提示されており、推理シーンが始まれば犯人はすぐ取り乱して馬脚を露す。さらにホワイダニットについてはほぼ自供頼りだった。とまあミステリ部分についていろいろ言ったが、とにかくテンポが良かったので、ラノベとして面白かったと思う。

一瞬布団から出て昨日のECRの動画を公開した後、再度布団に戻って別のラノベを読み続けていた。午後5時くらいになってようやく行動する気になり、シャワーを浴びて大学生協へ。床屋の前に購買でラノベを買ったところ、顔なじみの店員さんに学年を聞かれた。そういえばここで本を大量に買うようになったのは2020年だから、もう4年経ったのか。

床屋では散髪後に「ワックスは付けないんですか?」「ワックス付けるといいですよ!」と猛プッシュされて困惑した。実は前回もほとんど同じことを言われている。「急に結婚式に呼ばれたらどうするんですか!」みたいな話をされたが、そのようなイベントが自分の身に起こるとは考えたこともなく、愛想笑いしかできなかった。

学食で食事して帰宅し、再度シャワーを浴びた。食事中に自分の院試体験記を読んだ外部受験生から連絡が来ていたので、自分が当時作成した過去問の解答を整理して送った。院試ゼミのメンバーで分担して解いたため、自分の解答だけではカバー率が非常に低い。本当に参考になるのか不安である。

kotatsugame.hatenablog.com

今日買ってきたラノベをチェックしたら、予約したものと違うことに気づいた。生協への入荷メールまでは正しいため、おそらく他の人が注文した本と入れ替わってしまったのだろう。会計の際、電子マネーにチャージすることに気を取られて、商品の確認をおざなりにしてしまった。幸い明日も購買は開いているので、行って確認してみたいと思う。

もう夜も遅く、残念ながらゲーセンに行くような時間ではなくなってしまった。yukicoderに参加することとする。サイトを開いたら先週のコンテストのE問題がチャレンジで落ちていた。指数部のA_1+2A_2+\dots+NA_Nがオーバーフローし得るらしい。修正し、午後9時20分からyukicoder 435。

yukicoder contest 435 - yukicoder

Aは埋め込み。お誕生日コンテストと聞いていたので、この問題を見て「そういう」ことだと思ったのだが、以降は普通の問題が続いてびっくりした。Bは操作Bでできるようになることがちょうど二つのマトリョーシカを組み合わせることだけなので、最初に操作Aをできるだけやっておきたい。Rが大きいほうからmultisetで適当に貪欲すればよい。

Cはサンプル出力でお絵描きをし、A\lt Bとして(B,0)(0,0)(+B,+A)ずつずらしていくパターンを見出した。A\times Aの周囲を見ると四畳半みたいに詰め込まれそうだからかなりそれっぽい。ペナがないのでとりあえず投げてみると、大半のケースで通ってびっくりした。ABが互いに素でないとき壊れるようだ。改めてお絵描きすると、全体を(+B-A,+B+A)だけずらして繰り返せばよいことがわかり、もう一度出したら通った。

DはNyaanさんのライブラリから拝借した高速素因数分解を貼った後、Lを決め打って素因数ごとに数えた。数えるのにはdpを使ったが、結局分割数を計算していたらしい。またこのことを使うとp^2\mid Nなるpしか考える必要がなくなり、真面目に素因数分解するよりオーダーが落ちてライブラリなしでも解けるらしい。

高速素因数分解(Miller Rabin/Pollard’s Rho) | Nyaan’s Library

Eは勘。ケーキを切る側は弱そうというところから考察を開始した。このことから、お互いまずS\le Kなるケーキを交互に食べていくはず。残るS\gt Kのケーキについては、Sが偶数なら半分に分割した後真似っこ戦略をとることで切る側がS/2だけ食べられる。Sが奇数の場合は最初に1だけ切り離すなどで(S-1)/2だけ食べられる。「切る側が弱い」んだからこれが最善だろう。一つのケーキを食べつくすたびに切る側が交代することを考えて貪欲に取ったら通った。

Fは案外簡単。部分木のGrundy数をすべて求めたい。ある頂点uについてu以下の部分木だけ考えているとき、1手操作したときのGrundy数は、操作したパスから1歩外に出た頂点たちのGrundy数のXORだから、パスをuの親へと一つ伸ばしたときの変化は、パスのもう一方の端点によらない値のXORとなっている。つまり数値の集合に対して全体XORとMEXの取得、さらにマージテクが行えれば木dpで計算できる。そしてこれらは実際binary trieで実現可能。

Gには手も足も出ず。ただしABCEでFA、さらにFが2ACしか出なかったこともあって完数も点数も断トツの優勝となった。

「双子探偵ムツキの先廻り」を読了。これもミステリラノベ。双子の兄が常時異様なまでの警戒心で監視カメラを設置したり録音を行ったりしており、この「先廻り」によって得られた証拠で事件を立ちどころに解決するという話。ホワイダニットだけは担当できないので、双子の妹が代わりに暴く。証拠を出す前に丁寧に推理を行うものの、最終的にはポンポン出てくる証拠で押しつぶすような解決。ミステリとしては身も蓋もないが、爽快だった。

午前2時に寝落ち。

06/29(土)

午前4時に目を覚まし、ラノベを開いた。

「地味なおじさん、実は英雄でした。」を読了。ダンジョン配信モノ。面白かった。主人公がネットに疎く、また配信も姪が勝手にやっているだけなので、コメントやネットの反応の描写が薄め。この距離感が読みやすかった。そもそも主人公はダンジョン攻略自体に興味がないらしく、自身の強さや能力を把握していないようだ。他の冒険者より圧倒的に強いことだけはわかっているので、具体的な差がどれくらいで、今後どのように明らかになるのかが楽しみ。

しばらく日記を書き、午前9時から4時間ほど寝た。無事起床し購買に昨日間違って買ったラノベを持って行ったところ、書籍担当の店員がいないため来週月曜日に確認するということになったので、店に預けてきた。ちなみに自分が注文したラノベは棚に陳列されていた。およそ2年ぶりで2回目。まあ積んでいるシリーズの2巻なので、前回とは異なりほとんど気にならなかった。正しいほうも確認の必要があるため今日は買えなかった。

なんと店の棚に並べられていた。

週記(2022/10/03-2022/10/09) - kotatsugameの日記

思ったより時間が取られて学食で食事する暇がなくなった。慌てて帰宅し午後2時からUniversal Cup。今日は第3回目、Ukraineセット。

https://qoj.ac/contest/1714

書く

シャワーを浴びて食事し、午後9時からARC180に出た。これはオンサイトコンテストの予選でもある。

AtCoder Regular Contest 180 - AtCoder

Aは簡単。AABBはどうやっても消せないので、ABが交互に現れる区間に区切ることができる。これらは長さを2ずつ減らせるだけなので答えが簡単に求まる。あとは掛け合わせれば元の問題も解けた。

Bで大変な目にあった。サンプル4の出力を手で試したところ、どうやらP_l-P_rが小さいものを優先的に操作しているらしい。これを実装した。操作の候補をP_l-P_rで順位づけて管理し、操作するたびに関係する箇所O(N)個を更新する。操作がO(N^2)回であることに注意すると、pushがO(N^3)回、popがO(N^2)回行われる。

単に優先度付きキューを使う場合O(N^3\log N)で間に合わないが、popの際にP_l-P_r=1,\dots,N-1を舐めることにすればpushはO(1)になり、合計O(N^3)N\le 7くらいで愚直と比較し提出した。popでしくじって1TLEしつつ何とかAC。コンテスト開始から50分経過し、すでに200人通していてひっくり返った。

Cは順当に解けた。操作後のAを固定したとき、それを達成するような最短・辞書順最小の列だけ数える。これは余計な操作をしないようにすれば作れる。累積和が0になった箇所に注目すると、その直後の要素は操作によって変化しない。つまりそれが更新位置の末尾あるいはA=0なら取り除いてよく、そうでない場合も選べる最も先頭に近いものを使うべき。

これで、現在選んだ要素の和を持つdpが可能になっている。コンテスト中はなぜか最初からO(N\sum|A|)で書こうとして少し苦戦していたが、もう一つNをつけて次に選ぶ要素へ直接遷移すると簡単。

Dも見覚えのある考察。\max Bが真ん中のブロックに入っていれば、それを限界まで伸ばすのが最適。そうでない場合左のブロックに入っている場合を考えると、今度は真ん中のブロックを幅1にすべきだから、\max Bが左に入るような適切なiに対するA_i+\max\{A_{i+1},\dots,A_R\}の最小値を求める問題となる。オフラインなのでRを昇順に見ることができ、Rから左方向に見た累積MAXとそれを使った区間ADD区間MINの遅延セグ木を管理することで取得できる。

何とか4完を確保し34位。無事決勝に進出できた。Bの想定解はわかってしまえばあっけなく、なぜ逆順列を考えなかったのか不思議でならない。600点だから観察から力押しで解けるだろうと考え、あんまり腰を据えて考察していなかった気がする。ランダムケースも非常に小さい範囲でしか試せていなかったので、もし勘を外していたら悪夢だったろう。

コードゴルフとしてAをNibblesで解いておいた。一つ置きにABを反転しランレングス圧縮する方法。反転の代わりに列1,2,\dotsと足し合わせ、偶奇を見た。

www.youtube.com

「カミガカリ 不自然言語処理殺人事件」を読了。「AIのべりすと文学賞」の受賞作。神託された犯罪事件の真相をもとに、人が詳しい経緯を調べたり証拠を集めたりするミステリで、神様の役割はAIのべりすとが担う。試みとして興味深いしAIの活用方法も非常に好みだった。生成された文章を一言一句正しいものとする事件が組み立ててあり、一見不自然な箇所にも非常に合理的な背景が用意されている。文章の細部まで大切に扱われていて良かった。

小説としても面白かった。中盤くらいまではとにかく陰鬱で、登場するキャラがみんな不気味で好きになれず、主人公に味方がいないように思えて窮屈だったが、そのあたりの事情も最終的には回収される。また後半で扱われた事件は設定の根幹にも絡んできて、ストーリーの構築に唸らされた。単なるアイディアだけの話ではないということ。

相変わらずSageMathで実験を回している。要素が\mathbb{Z}の元であるような行列のランクや基底をなす行を求めているが、もしかしたら割り算ができる\mathbb{Q}で計算したほうが高速なのかもしれない。そう思って少し書き換えたところ、なんと3倍速になった。うーん失敗。

しばらくラノベを読んで午前9時前に寝た。

06/30(日)

午後6時起床。「英雄ブランの人生計画」1巻と2巻を読了した。これで6月は1日1冊ペースで本を読めたことになる。

最強の冒険者の一角だった主人公が引退し、正体を隠して別名義で再度冒険者をする話。正体の隠し方が徹底されていて、雑用依頼ばかり受けているから戦闘能力は一切知られておらず、他の冒険者に絡まれて返り討ちにするといったテンプレシーンすら存在しない。一方で、周囲に雑用依頼を布教している部分はスローライフ的で良いなと思った。

急いで食事して午後9時からABC360。

AtCoder Beginner Contest 360 - AtCoder

Aはsed。Bは言われたとおりに実装。Cは各箱に対し最も重い荷物を管理して計算する。Dは左向きの蟻それぞれについて幅2T区間に入っている右向きの蟻を数える。X-2Tがオーバーフローする制約で、あまりのいやらしさにびっくりしていたが、実はちゃんとサンプルで落ちるようだ。……と思ったら右向きの蟻を固定したとき出てくるX+2Tのほうは落ちなかった。やっぱりいやらしい。Eは左から2,\dots,N番目にいる確率が一致するので、左端にいるかいないかの2状態でdpできる。

Fはlを固定すると各区間に対してrがどの範囲にあれば交差できるか求まるから、lをずらしつつ区間ADD区間MAX・argmax取得の遅延セグ木で逐一rを求めていけば解ける。l,rの候補はL-1,L,L+1,R-1,R,R+1くらいなので、これらだけ集めて座圧すれば実現可能となる。ところが、座圧対象に0を入れる必要があることには気づいていたが、1まで必要だとは思いもしなかった。嘘解法。

Gは通常のLISに加え操作を行ったかどうかを持ってdpする。操作する際はLISにおける直後の要素とまとめて遷移することにし、dpの更新タイミングを少し遅らせることで一つ前のdp配列の値を計算に使えるようにした。最初はLISの長さに対して末尾の値の最小値を持つdpを書いたが、これはdp配列の値が単調増加になることを使うから、操作を行った後のdpでも成り立つかわからない。

そこでmapを使い、末尾の値に対してLISの長さを持つことにした。最適でない値は逐一探して消していくことにする。このあたりの実装に手こずりつつ何とか書き上げるも、最初の提出はWA。よく見たら操作しないケースだったり操作する値がLISの末尾に来るケースだったりを考えていなかったので修正し、通した。実はまだ嘘解法で、dpの初期値的にy=0での操作ができなくなってしまっている。

全完7位。ただしFもGもテストケースが弱いだけだった。コードゴルフとしては、sedで書いたAがそのまま最短になっている。

www.youtube.com

午後11時半からはCF combined、EPIC Institute of Technology Round Summer 2024。

Dashboard - EPIC Institute of Technology Round Summer 2024 (Div. 1 + Div. 2) - Codeforces

書く

www.youtube.com

食事・シャワーを済ませ日記を書いて午前10時くらいに布団に入ったら、大学生協から電話がかかってきた。ラノベの件。結局、自分が間違えて買ったラノベは他の誰かが注文したわけではなかったらしい。返金してくれるとのことだったが、誰のものでもないならとせっかくだからそのまま買い取ることにした。

しばらくハーメルンを漁って午前11時半就寝。

週記(2024/06/17-2024/06/23)

06/17(月)

午後3時過ぎ起床。半からインターン先定例会に出席した。

普段使っている進捗報告スライドを開いたら、フォントが変わっていて仰天。調べてみると、どうやら英数字で使われていたArialというフォントが日本語にも適用されてしまっているようだ。しかもなぜか使っているテーマのフォントを更新できない。どうしようもなかったのでそのままのスライドで報告した。Arialで表示した日本語はなんだかクネクネしていてへなちょこ。

ちなみに報告する内容はなかった。先週は勉強会準備に全力投球してしまった。業務をまともに進められていないのに勉強会だけ熱意マシマシで取り組むのはかなりの罪悪感がある。しかし準備が楽しすぎて止まらない。

さて、進捗報告が終わるといよいよ勉強会。今日のテーマは「ミラー・ラビン素数判定法」だった。質疑応答を含めて1時間強の発表。多くの聴衆から発表の構成やスライドの体裁についてお褒めの言葉をいただき、非常に嬉しかった。時間をかけた甲斐があるというもの。解散後にスライドを公開した。

勉強会0617.pdf - Google ドライブ

このテーマを設定した経緯について話すことにする。実は最初は「脱乱択」を扱おうと考えていた。COSS2023の三日目で講義を受け、また最近になって集中講義で触れたり熨斗袋さんが記事を書いていたりしたので、そのあたりをまとめるつもりだった。しかし調べ始めてすぐ、自分がこの分野に対しあまりにも無知ということを実感。何かの資料のコピペにしかならないと思いテーマを変えることにした。

noshi91.hatenablog.com

乱択アルゴリズムWikipediaを眺めていたら「ミラー・ラビン素数判定法」という単語を見つけた。そういえばwitnessとして\{2,7,61\}だけ調べれば実用上OKという事実がある。知識として知ってはいるものの、その背後にどういう理論があるのかは分からないから、これを調べてみることにした。

以上が動機である。結論から言うと、答えは「恐らく全探索」である。明言できるほどの記述は探した限り存在しなかった。良いwitness候補を見つける古い研究は理論と探索の組み合わせで取り組んでおり、詳細を把握するのが難しい。しかも肝心の\{2,7,61\}は論文の末尾にサラッと書かれているだけで、どのような探索が行われたのかの詳細が不明。

新しい研究はもっと不明瞭で、基本的にはGPUを使って探索しましたとしか書かれていない気がする。昔構成された理論が役に立っているようにはあまり見えなかった。さらには論文化されているものも少なく、個人のウェブサイトで発表されてリンク切れになっていたりと、そもそも探しにくかった。

というわけでスライドの後ろのほうはしょうもない事実の羅列になってしまった。こんなことになるなら、ACLの実装コメントの論文にあるようなハッシュを使った方法にも触れればよかった。どうせ全探索しているだけだろうと放置しているうちに存在を忘れてしまったが、この論文は全探索する前の理論的な話も結構しっかり書いているようだ。

大学生協に行ってラノベ受け取りと夕食をこなし帰宅。日付が変わるまで先週の週記を書き、投稿した。先週末はずっと勉強会準備をしていたためほとんど週記を書けておらず、結局スカスカのまま公開することになった。その後うっかりハーメルンを開いて2作読了。

「まぁ我慢強い勇者ならどんな苦難も乗り越えてアイドルを推せるだろう」。原作準拠なのかもしれないが、ヒロインが妊娠する展開には慣れない。慣れないどころかはっきりと苦手なようだ。恰好良くて「我慢強い」オリ主が、自分もヒロインも高校生だということを忘れて孕ませるわけないだろうと思う。

syosetu.org

VTuberって凄えよな、だってやりたいことなんでも出来るもん」。非常に面白かった。特に配信シーンが面白い。そのようなシーンは当然これまで読んできたVTuberモノにもあったが、基本はVTuberたちの為人を知り、キャラに愛着を持ったうえで面白さを感じていたように思う。ところがこの作品は配信それ自体が面白かった。現在の技術で再現できそうなギミックと小説ならではのテンポの良さがうまく組み合わさっている。

syosetu.org

日記を書いたりラノベを読んだりしていたら朝。先週行ったICPCチーム登録の完了通知メールが来たので、チームメンバーに転送した。ついでに連絡先のラベル付けを行ったので、今度からはもっと楽にできるだろう。また、ゴミを出した。

Amazonの定期おトク便で購入しているお茶の消費スピードが上がってきたので、頻度も3週間おきから2週間おきに上げることにした。しかし次の配送が07/01なので現在ある分では足りない。個別に購入することにした。ついでに切れかけのA4コピー用紙500枚も購入。およそ10か月前にも同じものを買っており、手計算メモとしての消費がほとんどでもそれだけのペースだったらしい。

午前10時就寝。

06/18(火)

午後5時半起床。ICPCの競技用ID・パスワードのメールが来ていたので、さっそく昨日用意したラベルを使ってチームメンバーに転送した。

セミナー準備を始めたが、サラッと書かれている同値性が示せない。論文の参照先にも単なる知識として書かれていて、さらにその参照先を調べると教科書の一部だったため辿れなかった。諦めて午後8時過ぎに外出。今日はヨドバシカメラとゲーセンに行く。地下鉄で仙台駅の一つ奥、宮城野通駅まで行き、まずその近辺のラーメン屋で腹ごしらえした。

ヨドバシカメラには書画カメラを探しに来た。これは主に本などの紙資料を映すカメラで、競プロ動画の手元撮影にも便利そう。ただタイピングしたり手計算したりするだけの高さが確保できるか気になるので、実物を見に来たのだ。しかし残念ながら取り扱いがなかった。秋葉原店にならありますと言われて乾いた笑いが出た。

仕方がないので退散。アンパンマンの石像を撮り、ゲーセンに移動。

まずサープラで6クレ遊び、閉店後に歩いてタイステのクリスロード店に移動しさらに5クレ遊んだ。今日はツユ曲の称号を集め、アプデで消えるマップを完走した。おそらくアプデ前最後のプレイとなるだろう。

アプデで消える称号のうち「うっせぇわ」のスピソニAJが条件になっているものは未取得である。1クレだけ挑戦してみたが全然ダメだった。譜面を覚えていないため手をジタバタさせることしかできず、まるでろくな準備をしていないセミナー発表直前のような気分になって、気持ち悪い冷や汗が出た。この場違い感のようなものをねじ伏せて詰めるだけのモチベーションはなく、ついでに詰め切る時間的余裕もなかった。

立ち食いそばを食べ、ドンキに寄って午前1時帰宅。シャワーを浴びた後はラノベを読んでいた。

「彼とカノジョの事業戦略」を読了。登場人物が軒並み経営者で、天才コンサルとして知られる主人公が活躍する話。またこの設定を二十歳になるかならないか程度のキャラ達で展開している。読み始めは年齢を反映した経営者らしからぬ口調に眉をひそめたものの、そもそも経営者という設定が好みなので楽しく読み進められた。主人公によるTOBがクライマックスかと思ったらもう一捻りあり、冒頭のシーンも反映した決着になったのは良かったと思う。

ところで作中の試験における評価がすでにインフレ気味で気になった。金額で表されるのだが、予選通過のボーダーラインが100億円だったところ、主人公はスタート時にすでに1000億円の評価を得ており、終盤まで目立った動きをせず少し追い抜かれたところで全く問題なかったようだ。しかもこれで7位だという。ちなみにボーダーラインは20位で、突破者の間でも差は激しい。

あとがきでシリーズの公式Twitterがあると知り確認してみたところ、作者の意向で2巻まででシリーズの刊行が中止されたことを知ってしまった。余計なことを知ってしまい出鼻をくじかれた気持ちになりつつ、そのまま「彼とカノジョの事業戦略」2巻も読了。冒頭で予選1位通過者の評価が1兆円だと明かされた。

1巻では主人公が本領を発揮し、順当に活躍するという展開だった。一方2巻では手ひどい失敗が描かれる。1巻で大事にしていた「win-winの関係」という題目に足元をすくわれた形で、ピンチを脱する救いの手もまた1巻から大事にされていた「自分の思い描く世界」というキーワード。失敗の傷はそこそこ大きいが、今後また頑張っていこう……というところで終わる。

作者があとがきでさんざん言っていたように、確かにこの2巻まででシリーズのプロローグとなっていた。ただし先が出ないことを知っている身としては、2巻の主人公がいいところなしで悲しいだけ。好きな設定だったし今後のストーリー展開もかなり準備されている様子が伺えただけに残念。

しばらく日記を書いていた。日が高くなるにつれ暑さが耐え難くなってきたので、今夏初めてエアコンをつけた。午前11時就寝。

06/19(水)

午後8時起床。セミナー準備を諦め、先々週と同じ資料を添付して参加者にメールを出した。1日で話しきれるとは思えない量がすでに用意してあるため、とりあえず明日は大丈夫。

せっかくなので論文の続きを読み進めるのではなく数値計算をしてみることにした。SageMathの豊富なライブラリを使うと結構簡単に実装できる。調べて出てきた信州大学チートシートを片手に書き進め、計算を回しながらラノベを読んでいた。

「恋愛魔法学院」を読了。主人公がかなり好み。ストイックさ、隔絶した強さ、見た目の良さ、モブキャラへの無関心さなどどれを取ってもお気に入りだった。そういう主人公だから貴族の集まる学院でも、また冒険者稼業においても周囲に煩わされることなく行動できていて、非常に気持ちよく読み進めることができた。主人公の前世は大学の研究員でAIが専門だったらしいが、そこまで決まっているということは後々効いてくるのだろうか。

シャワーを浴びて午前9時就寝。

06/20(木)

午後0時半起床。寝る前の計算は終わっていなかったが、現在の出力を集めてセミナーに持っていくことにした。原付で登校し、少し時間に余裕があったので学食で昼食を摂った。

午後1時半からセミナー開始。冒頭で現在行っている数値計算について話し、出力を少し説明した。予想と異なる結果が出ており興味深い……と言うつもりだったが、自分のコードがバグっているかもしれないと思い始めた。次回までには小さいケースで手計算しチェックしておきたい。あとは普通に発表。端折れるほど論理の構造を覚えているわけではなかったので全部説明してしまい、あまり進まなかった。このペースなら今用意してある分だけであと2回はセミナーできてしまう。

その後先生の発表。スライド発表の練習だったのであまり時間はかからなかった。最後に論文の手直し。自分が引用した論文の1本がつい最近アップデートされ、そこで自分の論文を引用してもらえたことを知った。非常にうれしい。

修論でも引用した論文の著者が4月に新しく論文を出しており、やっていることが自分の修論と非常に似ているらしい。

週記(2024/04/29-2024/05/05) - kotatsugameの日記

ただ残念なことに、名前がTakahashiではなくTakashiになっていた。Yandex Cupでも間違えられたので、もしかしたらロシア語圏の人にとってTakahashiは耳慣れない名前なのかもしれない。自分も論文を書いているときに人の名前を間違えて、先生に指摘されたことがあるし、まあ難しいよなあ。

午後6時過ぎ解散。後輩と学食に行き、食後もずっと路上で立ち話していて、午後9時を回ってから帰宅した。帰ってからはPCを触ったりスマホを触ったりしてグダグダ過ごしていたが、日付が変わってからはラノベを読み始めた。2冊読了。

社畜剣聖、配信者になる」。思ったよりギャグ色強めで楽しく読めた。コメント欄がちょっと荒れてもすぐギャグに押し流されるので、焦げ臭くならない。また社畜剣聖を縮めた愛称「シャチケン」がなんとも軽くて良かった。どんなピンチでもそうと思えないような気軽さで解決するため、個々のイベントがスピーディーに回収され、1巻だけでも内容が盛りだくさん。2巻が6月の頭に出ていたらしいが予約していなかった。

「生放送!TSエルフ姫ちゃんねる」。地の文があまりなく、配信シーンはほぼ主人公のセリフとコメントの掛け合いのみで進行する。そのコメントもリアルさを追求してかほぼ同じ内容のものが並んでおり、内容としては薄い。掲示板シーンのすべてのレスに番号・名前・日時が付されており、それだけでページの大半が埋まっていることもその思いを強くした。読みやすくはある。

日記を書いて正午前に寝た。

06/21(金)

午後8時半起床。しばらくハーメルンを読み、yukicoderの直前になって布団から出た。午後9時20分から開始。今日はyukicoder 434。

yukicoder contest 434 - yukicoder

Aは提出期限が31-A+B日後。今日を含めて何日あるか数えてしまい1WA。Bは全探索。Cはdp。Dは左上マスにカメラを設置する必要があり、それが右を向いているか下を向いているかでヤング図形が端から切り落とされていく。これを続けると最終的には、左上マスからスタートして右または下に移動することを繰り返し、ヤング図形を出るまでの経路を数え上げる問題になる。

EはN=2,3を手計算。N=2に対してはK^{A_1+2A_2}\left(\frac{K-1}K\right)^2\left(\frac{K+1}K\right)で、N=3に対してはK^{A_1+2A_2+3A_3}\left(\frac{K-1}K\right)^3\left(\frac{(K+1)(K^2+K+1)}{K^3}\right)らしい。ここから一般項をK^{A_1+2A_2+\dots+NA_N}\left(\frac{K-1}K\right)^N\prod_{i=0}^{N-1}\left(1+K^{-1}+\dots+K^{-i}\right)エスパー。N=4で愚直と比較すると一致したため提出、AC。

Fは何もわからず5完、スコア差で1位となった。

ラノベ「君の先生でもヒロインになれますか?」2巻を読了。前半の義妹のふるまいがとにかく気に入らなくて、信じられないくらいイライラしながら読んでいた。主人公の都合を考えず四六時中メッセージを送ったり通話をねだったりする点が特に嫌だった。後半の展開を見るに、義妹にわざとヘイトを集めていたのではとも思う。しかしそれにしてもこの苛立ちは過剰。こちらが読む前から不機嫌だったとかそういうことはないはずだが……。

午前8時就寝。

06/22(土)

午後1時前起床。NPCAPC 2024に参加した。Universal Cupに収録されるとのことだが、Nyaanさんがテスターのため二人チームになった。こういう状況でちゃんと成績を反映してもらえるかはわからない。質問しても見落とされたのか今のところ返答がない。

NPCAPC 2024 - AtCoder

書く

食事した後、ハーメルンから「転生御曹司が恋愛マンガみたいな世界で恋と性欲と友情についてマジメに考えてみる青春ラブコメ」を読了した。といっても4話しかない。やはりこういう設定は好みだなあと再認識した。

syosetu.org

シャワーを浴びて午後9時からABC359。

UNIQUE VISION Programming Contest 2024 Summer (AtCoder Beginner Contest 359) - AtCoder

Aはgrep -cを使いかけたが、見つからなかった場合REすることを思い出してC++で実装。任意の文字列が与えられると思いわざわざ完全一致で判定した。BはA_i=A_{i+2}を数えると楽。Cはy座標を合わせ、足りない横移動を補う。位置を各タイルの左下に揃えて計算した。Dは後ろK文字を持つbitDP。

Eは各prefixに対し後ろからの累積MAXの和が求まればよく、stackでできる。Fは有名問題で、dを貪欲にインクリメントしてよい。GはAが同じ頂点だけで圧縮木を作ってから考えようとしたが、書き慣れず手が止まった。いったん冷静になり木を圧縮した後にどうやって解くか考えたところ、木dpが思いついて、しかもマージテクを使えばすべてのAで同時に計算できることが分かった。

30分弱でノーペナ全完、4位。AとBをNibblesで解いておいた。

www.youtube.com

ラノベ「商人令嬢はお金の力で無双する」を読了。実家の領地が経営破綻しかけており、前世知識で立て直しに奔走する巻だった。タイトル通りのことができるのは次巻以降になるだろう。また女性の社会進出を阻む制度がかなり強調されていた。年齢を理由に軽んじられる話はたくさんあるが、性別はどうしようもなくて苦しい。侯爵という心強い味方が付いたのは不幸中の幸いといったところ。

午前2時ごろ寝落ち。

06/23(日)

午前6時半くらいに目を覚ましてラノベを読んでいた。午後1時過ぎに再度寝て、午後5時半くらいに起きた。今日はJAG模擬国内予選の内部コンテストがあったが、夜のコンテストに備えてサボってしまった。

午後6時からUniversal Cup Semifinals。

https://qoj.ac/contest/1708

順位表ではまずA、K、Cが解かれた。Aは全員で話し合ったのに、見事に1,\dots,1,d,d,dのケースを見落として1WA。こんなシンプルな問題が既出でないわけはないし、実際自分は結論にも見覚えがある気がするのだが、チームメイトは知らないと言っていたのでただのデジャヴュらしい。次のCはrisujirohさんがサクッと通していた。

自分はKを担当。k=1で考えれば十分なことに気づくと、あとはbinary trieでぶん殴れる。感想戦で、差が1の2数のXORが決まった形にしかならないことを指摘されたが、結局計算量的には変わらないだろう。binary trieのノードも自動的に少なくなるので、定数倍による区別は不可能のはず。

このあたりで一瞬順位表情報がなくなったが、すぐGが解かれた。読むと前から二分探索したくなる。それまでの文字列が分かっていれば部分文字列の種類数も計算できて、これで判定が可能になる。手元で念入りにチェックして提出、AC。

ここから、順位表的にはJ、L、Mが解かれている状態でしばらくACのない時間が続いた。次に解けたのはM。数字が縦に二つ並ぶとその左または右がほぼ確定するという事実を発見し、もう少し一般化して、1(または2)が左2マスにあるブロックと右2マスにあるブロックがそれぞれprefixとsuffixになることに気づいた。

それらの境界を固定すれば、埋め方は貪欲でよい。また境界でちゃんと分けられていれば、ブロックごとにどんな埋め方をしてもブロックをまたいだ矛盾は発生しないため、数字が縦に二つ並ぶブロックができるだけ少なくなるよう境界を端に寄せることが正当化される。つまり境界として可能な位置を探したらその端だけ試せばよい。1の境界を左に、2の境界を右に寄せる方法と、その逆の2通りしかないので後は愚直に計算。

全部?の状態から5マス埋めて作ったランダムケースを使いチェックしたところ、落ちるケースが見つかってしまった。なぜ落ちるのか解を見てもよくわからなかったのでしばらくガチャガチャやっていたが、単なる実装ミス。答えの比較がバグっていた。直して提出したら無事AC。

NyaanさんがJの2乗解にたどり着いたらしい。任せて他の問題を見に行く。順位表で解かれているのはBとLのみだが、risujirohさんがHに取り組んでいて、見た目的にもとっつきやすそうだったので自分も参加した。結果的にはこれが大正解のムーブとなった。

普通にdpしようとすると両端の座標とインデックスで4乗の状態が必要になるから、何とかして左右に分離したい。これは操作の大胆な言い換えによって達成できた。選んだ人に向けて引き寄せるという操作を、左右にある幅1の区間を高々一つずつ消すものと読み替える。当然区間は直近のものが選ばれるが、遠く離れた区間からも選べることにした。

もともと[a_1,a_1+1),[a_1+1,a_1+2),\dots,[a_n-1,a_n)という区間があって、位置pにいる人を選ぶと「左の区間[l,l+1)、「右の区間[r,r+1)(ただしl+1\le p\le r)を選んで消せるものと思う。ただし残っていなければ当然選べない。どんな選び方でも可能かは知らないが、何となくそれっぽさを感じて突き進んだ。

今は人に対して区間を選んだ。これを逆に見て、各区間について「左の区間として選ばれた」「右の区間として選ばれた」「選ばれなかった」の3種類に分ける。すると適当に選び方を組み替えることで、「左の~」がprefix、「右の~」がsuffixになるようにできる。また列avalueは選ばれなかった区間の個数だが、これを最小化したとき割り当てが一意に定まることを信じた。ここも未証明。

ただしこれを信じると、いよいよ左右を分離できる。答えを求めるには選ばれなかった区間[m,m+1)0\le m\le 800-1から一つ固定し、それが実際に選ばれないようなaを数え上げて足し合わせればよい。位置m+1/2より左に並んだ人は必ず「右の区間」を選べるので、考えるべきなのは「左の区間」を選べなかったmより左に並んだ人。よって左からdpできる。右も同様。

例えば左に対しては「m」「mより左に何人並んでいるか」「いくつ区間が余っているか」を持ってdpする。W:=800としてO(nW^2)であり、左右のマージも同じ計算量で行える。書いたら即座にサンプルが合ったので、半信半疑ながら提出してみることにした。dp配列を3次元ぶん確保してしまったためMLEを出してしまったが、二つ用意してswapすることで容易に改善でき、なんとAC。オンラインのほうではFAだった。

残り時間はLの最小費用流を考えていた。それっぽい解法を提案するもWAで終了。直後にCFがあることだけ覚えていたが、確認するとdiv.3だったためこれもサボって感想戦をしていた。Cは概要を聞くと想像がついたものの、細かいところを合わせるのは微妙に面倒そう。

Jは値の小さいほうから見て区間に覆われている具合を観察すると、まったく覆われていないインデックスが二つ以上出現した瞬間に破綻するため、高々一つ持って計算できるらしい。すると算数でO(n^2)状態のdpが書けて、実家dpにできるとのこと。各値についてそれがMAXとなる極大区間を見ることになるが、pがランダムなので十分高速。ただ2べきの計算が多く、そこでTLEして辛そうだった。

解散後はオンサイトの配信を見ながらラノベを読んでいた。

www.youtube.com

「黄金の経験値」4巻を読了。普通に面白い。あくまで普通で、書籍版で再読したことによる面白さの再発見は起こらなかった。錬金術による配合が主題だと思うが、これまでゲームの仕様を丁寧に調べてきたのと比べると、どうしても行き当たりばったりに見える。ただ、では配合テーブルを真面目に検証してくれれば面白かったかというと、それもまた違うだろう。難しい。天使のビジュアルがあまりにも醜悪でビビった。

オンサイトの配信では参加者へインタビューしながら同じセットを走ったときの録画を流していたので、5h経ったらYes/Noのような結果発表があるものと考えていた。しかし何事もなく、凍結も解除されずに終了。結果が気になって仕方がないので残念だった。

ちなみにオンサイトではUSA1が我々より早くHを通していたらしい。しかし結局その1ACだけだった。オンライン側で見つかっていなかっただけの可能枠だったら困るな、と思っていたので安心。またオンサイトの順位表を見ると、DとEにもACが出ていたようだ。Hを避けてそちらに行っていたらどうなっただろうか……と言いつつ、基本的には順位表情報に従うのが正解のはず。

まだ凍結は解除されていないが、オンサイトとマージされた順位表をじっくり眺めて計算した結果、最も悲観的なシチュエーションつまり凍結後に提出された問題がすべて通っていたという仮定の下でも、我々のチームはFinals未進出勢のうち8位に滑り込んでいる。決勝進出!!!

シャワーを浴び、日記を書いて午前8時半くらいに寝た。

週記(2024/06/10-2024/06/16)

06/10(月)

午後3時起床。半からインターン先定例会に出席した。先週もほぼ進捗はなく、ポツポツと連絡を取っているくらい。

勉強会はGoogle検索のランキングアルゴリズムについてだった。そういえばSEO対策ではページの表示が速いのもポイントの一つらしいが、最近のアニメ公式サイトはどれも過剰にグラフィカルで、その観点からは良くなさそう。ただ考えてみると、そういうサイトへのアクセス経路は作品名を直接検索するとかどこかの広告から飛んでくるのがメインだろうから、ずれたワードの検索結果で上位に来る必要はないのかもしれない。

解散後大学生協に行き、ラノベ受け取りと夕食を済ませた。帰宅してからはずっと先週の週記を書き進め、日付が変わる直前に投稿。相変わらず週末のあたりは穴だらけでスカスカ。

先月の家飲みで余ったほろよいを開け、ラノベを読み始めた。

明日は数学科の友人を自宅に招いて遊ぶ予定。

週記(2024/05/20-2024/05/26) - kotatsugameの日記

「美少女フィギュアのお医者さんは青春を治せるか」を読了。非常に面白かった。クリエイターをメインに据えた話は「Vのガワの裏ガワ」あたりから注目しているジャンルで、これもその一環として買ったが、期待以上のものだった。実のところ、主人公が創作のトラウマと向き合うストーリー展開については特に思うところがないかもしれない。それでも間違いなく面白かったと言えるくらいキャラクターがどストライクだった。

もう一冊読もうとしたが、酔いが回り非常に眠い。椅子で寝そうになったので慌てて布団に倒れこんだ。午前5時半ごろだった。

06/11(火)

午後1時半起床。布団でハーメルンの「身長2m28cmの大男、平成元年の日本に転生する」を読了した。転生特典の高身長を活かしてバスケで活躍する話。もう一つの特典としてイケメンにしてもらっているが、設定としてどう生きてくるのかわからない。他の作品だと、話の途中でしれっと「顔が良い」程度に言及されるだけのことが多い気がする。

syosetu.org

布団に横たわったままラノベを読んでいたら夕方になった。シャワーを浴びて原付で学食に行こうとしたら、原付に鍵が入らない。よく見ると鍵の先のほうがほんの少し圧し潰されたようになっていた。そういえば原付にこびりついた鳥のフンを鍵の先でこそげ落とした記憶がある。「鍵ってそれだけで変形してしまうのか」「ほんのちょっとの変形でも入らなくなるのか」という二つの驚きがあった。仕方なくスペアの鍵を使って出発。

鍵の潰れて出っ張った部分を削ればまた使えるようになるのではと思い、大学の駐輪場に転がっていた石に擦り付けてみることにした。数分ほど格闘すると見事スムーズに入るようになったため、帰りは元の鍵を使えた。

帰宅してラノベ。「あんたで日常を彩りたい」を読了した。これもクリエイター系の話。主人公がアートの天才と関わっていく話と言えばいくつか思い当たるものはあるが、この作品では主人公にはアートに対する熱意も目標もなく、結果その苦悩も他の作品とは異なり才能の比較には由来しなかった。まあその独自性が面白かったかというと別の話になってしまう。

昨日今日とクリエイターを題材にしたラノベを読んだ。しかしその系統は、才能に焦点が当たるか当たらないかという点で全く異なる。考えてみれば当たらないほうが特殊だろう。昨日は「Vのガワの裏ガワ」と「美少女フィギュアのお医者さんは青春を治せるか」を同じ扱いにしたが、ストーリーに一致する点は見出せず、ただキャラが好みだった点が共通している。単に設定として好きなだけらしい。

もう一冊読み進め、午後11時半からはCF #952 div.4に出た。

Dashboard - Codeforces Round 952 (Div. 4) - Codeforces

Aはよい。Bは真面目に考える必要はなく愚直での全探索が可能。Cは最大値と和を持てば判定できる。Dは円に含まれるマスの座標の平均値が中心。Eは二つの軸を全探索。Fは典型的な二分探索。Gはknの計算で繰り上がりが発生してはいけない。つまりnに出現する数字がすべて9/k以下であればよい。H1は操作を全探索して繋がる連結成分を数えることができる。

H2にはかなり手間取った。選ぶ行を決め打ったとき、それぞれの列についてそこを選んだ時に連結成分のサイズがどれだけ増えるかを一気に求めたい。行を選ばない状態から初めて、選んだ行によってキャンセルされる分を適切に処理できればよいが、これは各連結成分について関係する列が区間をなすことから区間ADDで可能。遅延セグ木を使えば最大値の取得も可能になって解けた。

全完、H1までが速かったのか6位。H2は各連結成分についてどの行を、またはどの列を選んだら答えに加算されるか考えればよかったらしい。先ほども述べたようにこれは区間になるため、累積和で処理できる。また2重にカウントする分は二次元累積和でキャンセルできる。これでセグ木の\logが落ちた。実行時間は703ms→437msであまり変わらない。またUFでサボっていた部分をBFSに変えたら逆に少し伸びた。

www.youtube.com

朝方まで論文に手を加え、少し日記を書いて午前7時就寝。今週のセミナーは木曜ではなく水曜、それも正午からの予定である。

06/12(水)

午前11時過ぎ起床。慌て気味に登校し、購買で買ったパンを食べて正午からのセミナーに参加した。

まず2時間は後輩の発表。教科書のうちセミナーでは飛ばした部分にある定義や定理を使う話からスタートしたら、即座にツッコミが入り、そこを説明しているうちに時間切れとなった。準備してきた部分に踏み入る余裕がなくて残念という気持ちと、案外重要そうな定義だったからしっかり確認出来てよかったという気持ちがある。

その後は久しぶりに先生の発表。毎回のセミナーで話すはずが、なんだかんだ我々の発表が長引いてばかりでなんと4月以来である。部分問題で\sum|x_i-y|を最小化するyの性質が出てきた。この形ならyx_iたちの中央値とすればよいのは競プロでは有名事実。今回はxが確率変数であり、正確には|x-y|積分値を最小化することになった。中央値をうまいこと定めれば結論は同じらしい。

次の2時間は先生が最近の研究内容について発表。予定されている学会発表に向け、この先数回は先生も話すらしい。

週記(2024/04/08-2024/04/14) - kotatsugameの日記

少しの議論も含め午後6時までかかった。学食で夕食を摂り下山。そういえば今日はサークルの活動日だったと思い出して教室に行ってみたら、ICPC向け3hバチャの終盤だった。最終問題に取り組んでみるも何もわからず終了。

https://onlinejudge.u-aizu.ac.jp/services/room.html#puzzleknot_20240612

午後8時頃帰宅し、サークルから出場するICPCチームの登録を行った。今年はmilkcoffeeさんと分担し、自分は3チーム担当する予定。

チュウニズムからツユ曲が消えるようだ。コナミは事件が報道されてすぐ削除したが、セガは微妙に時間がかかった。おそらく来週の大型アップデートで対応されるのだろう。理論値も出しているので心残りはない。少し増えた消える称号についてはまた集めに行く。

チュウニズムに収録されているツユの楽曲は全部理論値で揃えている

週記(2024/05/20-2024/05/26) - kotatsugameの日記

本を読んでいたら、AtCoderの企業対抗チームバトルが始まり、終わっていた。THIRDは見事優勝。先週の勉強会で短期AHCの戦略について詳しく議論されたが、こんなにすぐ成果に結びつくものかと感動した。

勉強会は短期AHCにおける戦略の話だった。

週記(2024/06/03-2024/06/09) - kotatsugameの日記

読んでいる本のクライマックスに差し掛かったところで午後11時半。せっかくのセミナーを控えていない水曜夜なので、3月以来久しぶりにCodechefに出た。Starters 138。

https://www.codechef.com/START138A

DISTSUBは長さ1,\dots,Kのislandの間を区切れればよいから、N\ge K(K+1)/2+K-1を判定。APOWBMODCは軽いギャグ。A^B\equiv 0\pmod CよりBが偶数かつCA^2だと嬉しい。このときにもう一つの合同式を満たそうとすると(B,C)=(2A,A^2)が考えられる。これでダメなのはA=2のケースのみなので、それだけ手で構築。

PREFSUFFもギャグ寄りか。prefixのbitwise ANDを大きくしたいので、同じ値を並べたい。そこで最初1,\dots,1,0を提出したが、これはA\ge 1の条件を満たさない。少し弄って3,\dots,3,1とした。TRIPRIは偶奇を見ればa=2と固定できる。あとは\sqrt N以下の素数の2乗を前計算しておいてチェック。

MODE_PROBLEMは各値の1個目を並べ、次に2個目を並べ、……とするのがよさそう。このとき必ず最後に置いた要素が最頻値となっているため、出現回数c回の値は答えへ1+\dots+cだけ寄与することになる。こうやってバラバラにすると差分更新が非常に簡単。KPRODSUMは最初部分列だと思い込んで畳み込みを持ち出してしまった。冷静になると尺取りで……は除算ができないため不可能。無理せず遅延セグ木で殴った。

CCLPEDは重みを固定して各辺を何回使うか考える。各頂点がflipする回数が偶数であること、また使う辺だけ集めたときの連結成分がそれぞれ2色持っていることが必要。手でいくらか試すと十分な気がしてきた。この場合重みとしては\min w_iから\min w_i-2までの3種類試せばよく、出したら通った。

48分で全完、2位。下のdivisionの2問も解いておいた。

コンテスト前に読んでいた本を読み切り、立て続けにもう2冊読んだ。

「永遠についての証明」。非常に面白かった。前半の数学科の描写はかなり真に迫っていると感じた。ただし学部入学から3年で研究テーマを決めたり取り組む問題を見出したりするのは現実離れしていると思う。またそういう様子が普通のこととして描かれるから、自分の現状と比較してつらい気持ちになったりもした。

しかし後半からは怒涛の展開。主人公の一人がどん底に向かって一直線に転げ落ちる様子にどんどん引き込まれていった。亡くなる理由はてっきり事故みたいなものだと思っていたのだが、まさかこういう展開だったとは……。そしてクライマックスに繋がる。ここの高揚感は物凄かった。オチは鉄板の手法ではあるものの、フラクタルを扱った作品であることを振り返ると感慨深いものがある。

以上、数学を扱う小説としては数学の扱いも正確だし、小説としての話の面白さもあるし、非常に良いと思った。ただ文庫本のカバーがいただけない。降ってくる数式が全部三角関数とはいったいどういうことか。しかも自分の買ったものは大きな帯が巻かれていて、そこには手書き風フォントで「数学知識必要度……星一つ」みたいなおせっかいが書いてある。余韻が台無し。

「煽り系ゲーム配信者(20歳)、配信の切り忘れによりいい人バレする。」。カクヨムで読んだ作品の書籍化。この作者は現在、同様のカクヨムラノベシリーズを複数抱えている。正直なことを言えば、自分が触れた他の2作品はどちらも主人公を持ち上げる向きが強引すぎてあまり好みでなかった。ではなぜ買ったかというと、この作品は面白かったという記憶が残っていたからである。実際今挙げた点については気にならなかった。おそらく副ヒロインと主人公の距離が少し遠いのが良かったのではないか。

続いて「煽り系ゲーム配信者(20歳)、配信の切り忘れによりいい人バレする。」2巻。だいたいここからカクヨムで読んでいない部分。そういえば1巻を読んでいるときには全く注意していなかったが、主人公は声だけの配信者、ヒロインはVTuber、2巻で登場したキャラは顔出し配信者らしい。声だけというのはちょっと想像がつかないなと思った。

Twitterで他人のいいね欄が見られなくなった。「今週中に~」みたいな話だったはずだが対応が早すぎる。

シャワーを浴びて午前6時半就寝。

06/13(木)

午後5時起床。しばらく布団でゴロゴロしてから学食に行って夕食を摂った。

帰宅してまた布団に戻り、ラノベ。途中寝落ちしたりネット小説にうつつを抜かしたりしながら昼前までずっと読み続けていた。「異端な彼らの機密教室」1巻と2巻を読了。

戦場帰りの主人公が学園に入学する話ということだったが、学生らしいシーンがほとんどなく訓練一辺倒。また任務で学園外に赴いての実戦シーンだったから、期待していた学園モノらしさというのは一切感じられなかった。2巻で完結らしい。話を回収し、締めのシーンも用意してきちんと終わっている点は好印象だった。

午前10時就寝。

06/14(金)

午後4時に目を覚ました。なろうを読み始めたら歯止めが利かなくなり、3時間ほど経過。購買は閉まったし今から学食に行くのも面倒。ゲーセンに行くかどうか検討しているうちに寝落ちした。起きたら午後10時半。仕方ないのでラノベを読んだ。

「非科学的な犯罪事件を解決するために必要なものは何ですか?」を読了。ハーメルンで読んでいる非常に好きな作品の書籍化。気合いを入れて読みたかったのでタイミングを計っていたら刊行から4か月以上経ってしまった。自分はWebで先を読んだから、1巻時点での主人公の自分語りが全く信用ならないことを知っており、かつそれがこの作品の特に好きな点になっている。しかし1巻だけでは伝わらないだろう。まだ続刊するとの情報がないが、どうだろうか。

続いて「現代社会で乙女ゲームの悪役令嬢をするのはちょっと大変」5巻を読了。これは気合いを入れて読みたいというより読むのに気合いが必要で、先ほどのラノベと同じくらいの期間積んでしまった。案の定読み終えると疲労困憊だったが、面白さは健在。この巻は経済以外の分野における主人公の活躍が多めだったと思う。そして後半ではいよいよ中学生に進級。側近団が入学してきて、校内でも派閥に気を遣った行動が求められ、これから大変そう。

日記を書いて午前10時半就寝。

06/15(土)

目覚ましで目を覚ましたら午後1時55分だった。飛び起きてUniversal Cupに参加。今日は第2回目、Zielona Góraセット。

https://qoj.ac/contest/1699

書く

食事して午後9時からABC358。

AtCoder Beginner Contest 358 - AtCoder

書く

www.youtube.com

明後日に迫った勉強会の準備を開始。朝まで取り組んで午前8時半に寝た。

06/16(日)

午後3時起床。AHC034に参加した。

Toyota Programming Contest 2024#6(AtCoder Heuristic Contest 034) - AtCoder

明らかに\mathrm{diff}=0を狙うべきだろう。これを達成する方法で簡単に実装でき、なおかつそこそこの順位が出そうな方法として、最小費用流を考えた。hの値に応じて各頂点に需要あるいは供給を設定し、辺のコストを1として流すと、移動する土砂量が最小となる解が見つかる。あとはこれを再現すればよい。

盤面をジグザグに動きながら土砂を積み下ろしすることにした。これで5209501703点。発展として辺のコストを縦横で変え、さらに盤面全体を転置してもう一度解いたら6063141450点が出た。どちらかの提出で一瞬順位表の2ページ目に滑り込んだはず。

残り時間は盤面上の動きを最適化しようとしていた。最小費用流で見つかる解は、土砂を1マス運ぶ動きの積み重ねになっている。これをリストアップし、適当に並べ替え、それに沿ってダンプカーを動かしてみた。最適化は近傍を2点swapとした焼きなまし。2-optのつもりだったが調べてみると微妙に違いそう。

最初の貪欲に勝てていないし、焼きなましの時間を延ばしてもスコアが特に伸びない。ダメそうと思いつつも他の方針を立てる気力はなく、適当にパラメータ調整をしていた。ギリギリ貪欲を上回ることのできた6117452898点が最終結果。236位。

TLの感想戦によれば、最小費用流を持ち出すのが早すぎたらしい。経路を決めてからそれに沿った辺のみで流すといい感じになるようだ。これは自分の解法に比べ、土砂の移動量を増やしてダンプカーの移動量を減らしたものと見なすことができる。実際自分の解を確認してみると、ダンプカーの移動によるコストが土砂のそれの倍くらいになっていた。この確認はできるべきだったと反省。

時系列が前後するが、実はAHCを1時間残して離脱し、午後6時からCF #953 div.2に参加していた。

Dashboard - Codeforces Round 953 (Div. 2) - Codeforces

書く

www.youtube.com

勉強会の準備をした。スライドの体裁にこだわりすぎたり、後半の内容がうまくまとまらなかったりして、非常に長い時間をかけてしまった。何とか形になったころには正午を回っていた。

午後0時半就寝。

週記(2024/06/03-2024/06/09)

06/03(月)

午前6時半、緊急地震速報で目を覚ました。スマホを見たら富山湾で発生したとのことで、仙台でも速報が出るくらい大きな地震なのかと震え上がったが、結局ここは揺れなかったし、実家の揺れもさほどではなかったようだ。また寝た。

午前11時起床。しばらく週記を書き、昼休みが終わった頃合いを見計らって学食に行った。食後にラノベを受け取って帰宅。来るときは青空が見えていたのに食べている間に一気に曇ってきて、一雨降るかと焦った。

午後3時半からインターン先定例会に出席。進捗はない。待ちのフェーズではあるものの、できること・やっておいたほうが良いことは当然あるので、そういうものを進めていきたいところ。

勉強会は短期AHCにおける戦略の話だった。聞きながら自分の戦績を振り返ってみて、貪欲でうまく行った回がほとんどだということを改めて認識した。しかも強い貪欲を作れた先のマラソンテク、例えばプレイアウトやビームサーチで負けているようだ。自分はその間貪欲の些細な改善に固執し続けていた。だからまあ、まずはマラソンを頑張りましょうということになってしまう。

解散後は週記を書いていたが、途中で少しハーメルンに手を出した。先週から読んでいた「最強の魔法使い(自称)が暴れるそうです。RE:」を読了。リメイク前後で文章の質がガクッと下がり失速してしまったものの、何とか読み進めていくと徐々に改善されてきた。あるいは自分が慣れただけかもしれない。とにかく無事最終話までたどり着くことができた。

その最終話で主人公が死んでしまった!ありとあらゆる能力が剥奪され、苦しみながら死んでいった!まさかチートオリ主ものがバッドエンドになるとは思いもせず、まったく身構えていなかったので深い衝撃を受けた。救いを求めて続編をチラ見しても状況は変わらず、しかもエタっている。絶望。能力元の「東方異形郷」も悲惨な話らしいが、わざわざ再現してくれなくてもよかったのに……。

syosetu.org

落ち込みながら週記の執筆に戻り、午後11時過ぎに投稿。半からCF #950 div.3に出た。

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

Aはよい。Bは出力の説明を読まないと正確な問題がわからない。コードを書き上げてから読んだらMAYBEも判定する必要があってひっくり返った。Cは上書きなので後ろから見る典型。最後の操作以外はキャンセルできると思ってよいため、最後の操作が行えるかと、必要なだけの操作があるかをそれぞれチェックすればよい。Dは削除した位置の周りだけ真面目に計算し、残りは前計算した結果を使って判定する。

Eは行を値の集合と見て揃えた後、列の並び替えを求めてすべての行で一致しているか調べた。FはF1を飛ばし、直接F2を解いた。cの昇順に並べてrの累積MAXを取ると経路が求まる。累積MAXの更新点を一つ消したとき、新たに更新点となるのがどこかわかればよく、候補がdisjointなので線形時間で解いても合計O(k)で十分高速。F1とF2は微妙に異なる問題だが、F2のコードをそのままF1に出しても通るようにしてくれていてありがたい。

Gは適当に決めた根からのパスのXORとして管理すると、深さが奇数の点に対するXOR更新と、定数をXORしたときの最大値の取得になる。深さの偶奇で分ければbinary trieで対応可能。ライブラリが空集合のMAXを取ろうとすると壊れる実装で、手元では動いたため気づかず提出してしまったが、幸いサンプル1で落ちてくれたためペナを逃れた。

1時間で全完して4位。

www.youtube.com

森見登美彦さんも参加されているアンソロジー小説が近く発売されるらしい。慌てて注文した。

tomio.hatenablog.com

ところで、大学生協で受け取るための注文サイトが「大学生協のオンライン書籍注文サイト」から「オンライン書店Honya Club.com」に変わる。すでにアカウントがあって何事かと思ったが、メールを掘り返してみると2020年の9月くらいまで使っていた形跡があった。サイトが変わって、4年越しにまた戻ったということらしい。注文履歴は消えていて残念。「書籍注文サイト」があり得ないくらい重かったので、快適になってシンプルにありがたい。

オンライン書店Honya Club.com

シャワーを浴び、洗濯して午前5時就寝。

06/04(火)

午前9時半起床。降水確率40%だが原付で登校した。

午前10時半からZoomでオンラインセミナー。4月にお越しいただいた先生に、再度セミナーをしていただいた。前回紹介していただいた論文を指導教員以外の先生も交えてセミナーで精読しているため、話の内容もよくわかり、多少の議論もできて有益だった。特に大局的な話、他研究と比較しての位置付けについて話していただけたのが非常にありがたい。

午前10時から2時間弱は招いた先生によるセミナー。

週記(2024/04/08-2024/04/14) - kotatsugameの日記

解散後、指導教員の先生と教室で話していたら、次の利用者の先生が来たので退散した。この先生には自分がB2の頃、群論の講義と演習でお世話になったことがある。今日、自分の顔を見てすぐ演習で解いた問題を言い当てられ、本当にびっくりした。5年前のことなのによく覚えていらっしゃるものだ。当時発表で炎上してしまい苦い思い出となっているのだが、それを理由に覚えているという雰囲気ではなかったので救いになった。

セミナーで紹介していただいた本を資料室で借り出した後、学食で食事。ICPCの国内予選ルールが変更されたのを知った。特に事前準備の許可が大きいと思った。多分ライブラリのコピペがOKになったということだろう。

午後2時過ぎに帰宅。ひとまずPCの前に座ったものの、なんとなく眠くて何かする気にならず、布団に戻った。午後3時半から午後7時くらいまで寝ていた。目を覚ましてからもPixiv小説を読んだりYouTubeを見たりで、さらに3時間くらいダラダラ過ごしていた。

再来週の月曜日にインターン先勉強会での発表を控えているため、題材を探し始めた。最近解いた問題から何かないかと調べてみたものの、どれもピンと来ない。前回の2次元遅延セグ木は同様の考え方で決めたテーマだった。それがTwitterで少し話題になって嬉しかったから、今回も興味深いものを……と思っているものの、暗雲が漂う。

日付が変わり、TCBの2024/05回が終了した。3位。

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

5問目まではよい。6問目は冷静になるとkとしてNの約数だけ考えれば十分なので、愚直にチェックできる。7問目は各行各列のpopcountだけ覚えていれば総和の差分更新が可能。10分かかってギリギリではあったものの、何とかここまで理論値で通せた。

8問目は問題文がカス。まずスタートマスが定義されていない。(a,b)(c,d)が入力で与えられて片方がゴールならもう片方がスタートだろうとは分かるものの……。また、氷の床みたいな設定で移動できるか聞くのだからそのマスにピッタリ停止できるか判定するものだと思ったが、違うらしい。ここの定義が曖昧なのはどうしようもなく、解釈に失敗して1WA。時間ボーナスも少し削られて-12ptとなった。

9問目は操作が可逆なので、それぞれ辞書順最小になるよう操作して比較した。実験から見出した規則を頑張って実装しても全然合わなかったが、改めて考えると2連続の1を作って削除・挿入する方針で説明がつくことに気づき、そこそこシンプルな実装に落ち着いた。実は削除し切った段階で比較しても同じであり、辞書順最小の列を作ることに固執する必要はなかったらしい。ランダムケースで試して提出。WAこそ出なかったものの73分かかってタイムボーナスが消え、-42pt。

10問目は行列累乗。Nがクソデカ整数だが、2分の1のために毎回桁数に対する線形時間をかけても間に合うので適当に実装してよい。これは20分で実装が終わり、理論値だった。

11問目はbitを別の数の同じ桁に移すことが可能なので、増やせるか考える。{00}_{(2)},{10}_{(2)}{11}_{(2)},{01}_{(2)}にできるので、最上位bit以外ならかなり自由に扱えそう。最上位bitは一度減らすと戻せないので、全部の数でそこが立った状態を保ちたいなら一つ下の桁以降を見て解くことにし、そうでないなら先ほどの議論からほとんど何でもできるということになった。愚直と比較して提出。27分かかって-6pt。

12問目はとんでもない時間がかかってしまったが、結論はシンプル。aa...abb...bを取り除けるだけ取り除いて残る文字列が同じものをすべて作れるので、逆に残った文字列に挿入する方法を考えて数え上げる。重複して数えないようにするため、ある文字の前に挿入する際は、それと異なる文字が来るようにした。

あとは削除できる文字列の数え上げとなる。FPSで立式するとf=x\left(\frac{1}{1-f}\right)^{K-1}になって、収束が遅すぎるしニュートン法もうまくいかなかったものの、小さいKに対してOEISで検索したらそれぞれ一般項が出てきて、Kに関しても一般化できる形だったためうまくいった。[x^i]f=\binom{Ki-2}{i-1}/iらしい。

ちなみにその後g:=\frac{1}{1-f}を計算しており、こちらで式を書き直すとg=1+xg^Kとよりシンプルな形が出てくる。まあ一般項は大して変わらない。K=2では意味的にもカタラン数だとわかるが、その一般化として研究対象になっているようだ。

fが計算できるようになった段階で、それを使ってdp遷移するコードを提出したものの、TLEしてしまった。冷静になって見直すと、やっていることはg^c(1+(g-1)+(g-1)^2+\dots)の計算に他ならない。ここでcは残った文字列の長さに1足したもの。二分累乗法を使って出しなおしたら通った。3時間と1ペナで-68pt。タイムボーナスもないのになぜ焦って提出したのか理解不能

potato167さんの解説ブログも貼っておく。

potato167.hatenablog.com

午前1時頃に寝てしまった。

06/05(水)

午前8時起床。しばらく布団でゴロゴロした後、セミナー準備に取り掛かった。今日の夜は競プロサークルの確定新歓があるため、それまでに完成させたいところ。

……のはずが、完成間近で論文の証明にミスがあるのを発見し、修正が間に合わなかった。仕方ないので中途半端な資料を、夜中に更新するかもと言いつつセミナー参加者に送信。シャワーを浴びて午後6時頃に家を出た。

確定新歓は昨年と同じ店の同じ焼肉食べ放題。ただし今年はホスフィンが来ておらず、ほかのM2も軒並み不在にしていて、自分だけちょっと歳が離れていた。調子に乗って昔話、それこそコロナ以前の体験談を喋ってしまったが、良くない老人仕草なので控えめにするべきだったかも。競プロの実装に関して質問されて嬉しかった。

今日はサークルの確定新歓の日だった。

週記(2023/05/22-2023/05/28) - kotatsugameの日記

特に二次会もなく解散。その足でゲーセンに行き、閉店まで18クレプレイした。未プレイだったLv.15 4譜面を触り、LUMINUSバージョン稼働以来およそ半年ぶりにレーティングポゼッションが復活した。オーバーパワーが99%をギリギリ超えるくらいで、今の基準だとプラチナらしい。

特に「Makear」と「ラストピースに祝福と栄光を」が体力譜面で大変だった。前者は前半がうまくいった回で後半耐えたスコアであり、伸びしろがない。後者は最初の数回だけ大宇宙ステージ地帯の両手トリル餡蜜がうまくいったのだが、後半が振るわなかった。逆に後半が慣れてきたころには前半でポロポロ失点するようになってしまい、なんとも噛み合わない結果に。

満腹なので食事はせず、ドンキにも寄らずに帰宅した。シャワーを浴びようとしたものの眠気に負け、しばらくカーペットに横たわって寝ていたらしい。午前2時くらいに目覚め、何とかシャワーを浴びて再度就寝。結局セミナー準備の続きはできなかった。

06/06(木)

午前11時起床。昨日できなかったセミナー準備を行い、ミスのあった証明にも代わりの正しいものを用意できた。午後1時過ぎ原付で登校。夕方から降水確率40%らしい。

学食で食事して、半からセミナー開始。前回準備した分の残りを話そうとしたら内容をあまり覚えておらず、頻繁に資料を確認してしまった。また細部はいくらか飛ばそうと思っていたのに、どこを飛ばすべきか考えておらず、結局全部丁寧に話してしまった。今週準備していた部分は丸々残ってしまって次回話すことに。証明のテクニックはもう出尽くして、残りは面倒な計算パートが多いので、どう説明するか考えておかなければならない。

曇り空が怪しくなってきたので帰ろうとしたが、この後後輩と先生が話し合いをすると聞いて、興味本位で同席することにした。ただし話し合いといっても次回のセミナーの確認だけだったようだ。先生が去ったあとは後輩が読んでいる教科書についてしばらく二人で議論した。一段落して学食に行ったら今度は雑談に花が咲き、午後8時前になって解散した。

帰宅後、COSS2024への参加申し込みを行った。セミナーの合間に先生に相談したところ、問題なく許可が出た。何かが起こる気配も今のところないため、冬のLAシンポジウムみたいにキャンセルすることにはならないはず。

COSS2024 Home

午後11時半からCF #951 div.2に出た。

Dashboard - Codeforces Round 951 (Div. 2) - Codeforces

Aは、Bobはできるだけ短い区間を選ぶべきなので、隣接項のMAXのMIN引く1が答え。Bはi\oplus j=x\oplus yに加えi\oplus(i+1)=j\oplus(j+1),(i+1)\oplus(i+2)=(j+1)\oplus(j+2),\dotsが条件となるので、ijともに下のほうのbitは一致し、特に全部0になっていてほしい。つまりx\oplus yを割り切る最大の2べきが答え。

Cは整数性を忘れると\sum 1/k\lt 1が条件。判定を考えるとA:=\mathrm{lcm}(1,\dots,20)を使って\sum A/k\lt Aか見る方法が思い浮かび、よくよく観察するとこれがそのまま答えにもなっている。つまりx:=A/k。Dはpを全探索する。先頭からp-1文字とp文字目以降がそれぞれk-properになっていて、かつ操作後に繋がる部分にも少し条件があるが、チェックは簡単。Eは45度回転すると必ず2点が軸に並行な直線に乗る。

Fは有向完全DAGのハミルトンパスを作るのと同様に再帰を考えたら解けた。補グラフで説明すると見通しが良いので、そうする。次数の条件も反転していることに注意。d=1で聞いて、もしu\ne 0が返ってきたなら、頂点vは次数1で辺(v,u)と接続している。つまりvが削除された今、n-1頂点n-3辺となっている。そのハミルトンパスを再帰的に作ると、どちらかの端点にはvを繋ぐことができるため、元のグラフのハミルトンパスが得られる。

ではu=0が返ってきた場合はどうするか。この場合孤立点vを削除しており他の頂点の次数は一切変化していないから、次にd=2で聞いたとき返ってくる頂点は次数が0または2となっている。それぞれu=0u\ne 0に対応するため、u\ne 0だった場合はn-2頂点n-4辺のグラフが得られており、先ほどと同様再帰的にハミルトンパスが構成できる。以下u=0の間d=3,4,\dotsと聞いていけばよい。

全完3位。Fでd=1を聞いてu=0が返ってきた後は、dを最大値にして次数最大の頂点を削除するという方法もあるらしい。この場合辺の数がn-2本「以下」の状態で再帰することになるが、確かに特に問題なく構築できる。

www.youtube.com

「冬季限定ボンボンショコラ事件」で描かれた中学生時代の小佐内さんは、挨拶で何度か「おわあ、こんばんは」と言っている。何の意味があるのかわからなかったのだが、萩原朔太郎の詩に由来することを知った。

ラノベを読んで午前8時半就寝。

06/07(金)

午後2時半起床。CHUNITHMのバージョンアップ情報が流れてきた。ここ最近のイベントが全部06/19に終了するところから何となく予想はついていたが、削除される楽曲については予想外。ボカロジャンルに属していても人間が歌っていればポプアニジャンルと同じ感じで消えていくのだろうか……。ただしこの理論では「FREELY TOMORROW」が消える理由がよくわからない。

info-chunithm.sega.jp

ラノベを2冊読んだ。1冊目、「異能学園の最強は平穏に潜む」3巻。今回は主人公が最初から大きく動いていて楽しかった。読んでいる最中はあいまいな描写に動揺したものの、振り返ってみると全編無双シーンと言える。2巻3巻で主人公の能力が加速度的に明らかになっているが、言っていることが本当なのか怪しいので底はまだ見えない。

2冊目、「孤高の華と呼ばれる英国美少女、義妹になったら不器用に甘えてきた」。主人公がスポーツ熱心な好青年で非常に印象が良い。ヒロインの隣にいても違和感がないというのは重要だと思う。野暮ったかった見た目を整え、努力して違和感を消す主人公もいるが、最初から評価が高いほうが振る舞いにも自信を感じられて好み。

午後7時くらいになって外出。歩きながらハーメルンの「天才TS美少女はわからされたい!」を読み切った。自分はチート主人公で才能に満ち溢れている、だからなんでもやってみればできる、という自信の持ち方が少し危なっかしいと思った。地に足がついていなくて怖い。

syosetu.org

立ち食いそばを食べ、本屋で本を買ってからゲーセンに向かった。今日は金曜日なので金曜奴の集まりを避け、GiGO仙台へ。閉店まで18クレプレイした。家を出る前にバージョンアップで消える楽曲の称号を調べてきており、もっぱらそれらを集める作業をしていた。

特に14+の「紅」と「]-[|/34<#!」はAJを出していなかったので、曲名称号を取得するため頑張って詰めた。「]-[|/34<#!」の最後のフリックが全然入らなくて気が狂いそうになった。腕はボロボロになったものの、最終的にはどちらも出せたので、楽曲追加当時からの成長を感じた。

別のゲーセンのトイレを使ったら店員と目が合ったので、申し訳程度にもう2クレプレイ。立ち食いそばを食べた後ドンキに寄った。税抜100円の「つぶつぶチョコ」という商品を発見し、安さに惹かれて5袋買ったのだが、帰ってきて食べてみたらチョコの糖衣部分のケミカルな味が舌に合わなかった。まさかこの世に不味いチョコ菓子があるとは。5袋もあるのにどうすればいいんだ。

今日買ってきた本のうち1冊は、予約に失敗したSAOの28巻。

SAOの新刊が2年弱ぶりに出るが、すでに予約が品切れとなっていて残念。

週記(2024/05/20-2024/05/26) - kotatsugameの日記

ところで現在、hontoというサイトのMy本棚機能を使って本の購入記録をつけている。こうしておくとhontoの商品ページに表示が出て、買った本かが判別しやすいのだ。ところが今日登録しようとしたらできなくて焦った。どうやら紙の本に関してはサービス全般が終了し、電子書籍だけのサイトに変わったらしい。しょうがないので電子書籍として登録しておいた。紙の本の登録は最終的に703冊に上った。

シャワーを浴びて午前3時半就寝。

06/08(土)

午後1時半起床。午後2時からUniversal Cupに参加した。先週トライアルコンテストを終え、いよいよシーズン3が本格始動する。今日は第1回目のSt. Petersburgセットだった。

https://qoj.ac/contest/1696

書く

動画準備を整えた後はラノベを読んで過ごし、午後9時からABC357に出た。

SuntoryProgrammingContest2024(AtCoder Beginner Contest 357) - AtCoder

書く

www.youtube.com

「極めて傲慢たる悪役貴族の所業」3巻を読了。語り手の切り替えがかなり頻繁にあって読みにくかった。語り手となるキャラも多いし、別々の場所の出来事が並列して描かれるのでなおさら。特にラストは視点を切り替えまくって風呂敷を広げるだけ広げ、回収はすべて次巻以降に丸投げという印象で、今のところ何が起こっているのかよくわからず混乱中。ただ中盤までは話もそれぞれ一区切りついて面白かったということを明言しておく。

午前5時就寝。

06/09(日)

午後1時起床。昨日今日とアーケードのあたりで「東北絆まつり」という祭りが開催されているらしい。東北6県の有名な祭りが一堂に会するということを数学科の友人から聞いて、ちょっと行ってみようかなという気になっていたのだが、調べたら昨日の人出がものすごかったらしくて萎えた。

布団でラノベを読んでいた。「血の繋がらない私たちが家族になるたった一つの方法」を読了。ヒロイン二人の導入から恋愛トラブル、偽カップル成立までがテンポ良く描かれて面白かった。恋愛トラブルの発端となった男子は、最初の描写だけだと根暗なオタクくんに見えて少し苦い気持ちになったが、実際は見た目良し・頭良し・運動神経良しのかなりの好青年でびっくり。主人公とヒロインの偽カップルに対し正々堂々と向き合っており、こじれるような気配がなくてよかった。

午後6時くらいに寝落ちした。次に起きたのは午後10時。シャワーを浴び、食事して午後11時半からCGR26に出た。

Dashboard - Codeforces Global Round 26 - Codeforces

書く

www.youtube.com

ラノベ「血の繋がらない私たちが家族になるたった一つの方法」2巻を読了。この巻も面白かった。ヒロイン二人の過去についての話がメイン。主人公にも何かあるようだが、まだほとんど何も明かされていない。ラストの体育祭のシーンはなかなか過激でよかった。そういえば、ヒロイン二人を侍らせる主人公に対する周囲の嫉妬というのはほぼ描かれていない気がする。体育祭での行動にはどんな反応が来るだろうか、3巻冒頭が楽しみ。

日記を書いて午前10時過ぎ就寝。