kotatsugameの日記

読書記録(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
  • 23日
    異世界でチート能力を手にした俺は、現実世界をも無双する15,16
  • 24日
    異世界エルフと京大生
  • 26日
    王の帰還1
  • 28日
    原作最強のラスボスが主人公の仲間になったら?
  • 30日
    高校時代に傲慢だった女王様との同棲生活は意外と居心地が悪くない1,2

8月

  • 19日
    ムーンシャイン

9月

  • 13日
    黄金の経験値V
    願ってもない追放後からのスローライフ
  • 16日
    悪役転生者は結婚したい
  • 17日
    池袋ウエストゲートパークXVII
  • 18日
    レベル0の無能探索者と蔑まれても実は世界最強です2
    怠惰な悪辱貴族に転生した俺、シナリオをぶっ壊したら規格外の魔力で最凶になった2
    悪の令嬢と十二の瞳
  • 20日
    こましゃくれり!!
    家事代行のアルバイトを始めたら学園一の美少女の家族に気に入られちゃいました。2
    現代社会で乙女ゲームの悪役令嬢をするのはちょっと大変6
  • 21日
    凶乱令嬢ニア・リストン6
    ネットの『推し』とリアルの『推し』が隣に引っ越してきた3
  • 24日
    R.G.O!1
    多元宇宙的青春の破れ、唯一の君がいる扉
    万年を生きる平和主義ヴァンパイア、いつの間にか世界最強に
  • 25日
    隣に住んでる聖女様は俺がキャラデザを担当した大人気VTuberでした
    前世は冷酷皇帝、今世は幼女
    妹の配信に入り込んだらVTuber扱いされた件1
    モンスターの肉を食っていたら王位に就いた件1,2
  • 27日
    モンスターの肉を食っていたら王位に就いた件3
    横溝碧の倫理なき遊戯の壊し方
    黒幕ゲーム1,2
  • 29日
    ビリオネア・プログラム
    孤高の華と呼ばれる英国美少女、義妹になったら不器用に甘えてきた2

10月

  • 2日
    カードゲームで世界が滅ぶ世界に転生してカードショップを開店したら、周囲から前作主人公だと思われている
  • 19日
    バスタード・ソードマン4
  • 31日
    恋愛魔法学院2

11月

  • 4日
    異世界に放置ゲー理論を持ち込んだら世界最強になれる説1
  • 5日
    ツンな女神さまと、誰にも言えない秘密の関係。2
    異能学園の最強は平穏に潜む4
    俺は星間国家の悪徳領主!9
    【悲報】お嬢様系底辺ダンジョン配信者、配信切り忘れに気づかず同業者をボコってしまう
  • 6日
    【悲報】お嬢様系底辺ダンジョン配信者、配信切り忘れに気づかず同業者をボコってしまう2,3
  • 9日
    FPSゲームのコーチを引き受けたら依頼主が人気VTuberの美少女だった2
    四刀流の最強配信者
    女友達は頼めば意外とヤらせてくれる5

週記(2024/11/18-2024/11/24)

11/18(月)

午後3時過ぎ起床。

JOI一次予選の第3回が公開されていた。そこそこタイミング良く発見したらしく、FAではなかったものの0msでのFastestは4問とも獲得できた。コードゴルフも行ったが、数日後に確認したらB以外すべて縮められていた。どれも書き方だけの問題でなく、そもそも短く書けるアルゴリズムを思いつけていなかった。

JOI 2024/2025 一次予選 (第3回) 過去問 - AtCoder

午後3時半からインターン先定例会。先週伝えたように稼働はしていない。論文は無事書けて、今週金曜日の学内での発表も何とかなりそうだと報告した。勉強会はヘッドマウントディスプレイの紹介。操作はコントローラーで行うものと考えていたが、視界に映った手のジェスチャーを認識することもできるらしい。

先週の週記は午後7時半に投稿し、それからCFの5hコンテストに参加した。もともと先週木曜日に予定されていたと思うが、トラブルがあったらしくこの日にずれてきた。

Dashboard - 2024-2025 ICPC, NERC, Southern and Volga Russian Regional Contest (Unrated, Online Mirror, ICPC Rules, Preferably Teams) - Codeforces

順位表に従ってNJACLBGKDFIMをこの順に解き12完、20位。

N、Jはよい。Aはよくわからなかったが解かれ具合を見るに後ろの人に貪欲に押し付けてよいらしい。Cは大きな方と小さな方から2個を組み合わせる。Lは切り出し方7パターンのうち二つを全探索する。もう二つは高々1回しか使わず、残りは貪欲でよい。Bは式を立てて解くと\frac{a_1+2a_2+\dots+2^{n-1}a_n}{2^n-1}が登場。これが整数なら商を使っていろいろ決められる。2進数表現を見ながら無理やり計算した。

Gは結構面白い。111を聞いて差を取ると1の連結成分数がわかり、その値を01と比較することで先頭が確定する。Kはc(i,j)=2となる最後のマスを必ず通るべき。そこまでのコストは算数、それ以降は十分狭いのでdpできる。Dは最後の区間のORを持ちながらdpすると状態数がO(n\log n)になる。

FはE\ge lとなる選び方を数え上げることにする。FPSで立式するとテイラーシフトになっているので、窃盗。nononさんのコードを開いてみたらACLを使いめちゃくちゃシンプルに実装されていて非常にありがたかった。

https://judge.yosupo.jp/submission/211045

Iはよく解釈すると行列を適切に左シフトしてから辞書順最大の行を求めよという問題になっている。2倍にしてすべて連結しSuffix Array。Mは各スート必要なカードを何枚持っているか管理してメモ化再帰し、計算結果を埋め込み。手札に残すスートは一種類だけでよいと思っていたが、サンプル2で落ちてくれて助かった。

ここまで3時間。残りの2時間はEと格闘していたが最後まで通らなかった。後ろから埋めていくのが最適であるというのは正しく、実装ミス。後日WAだったテストケースを確認して直しておいた。埋めるタンクを先に取り除いてから頑張って算数していた部分を、単に粘土を追加して水位を均してから取り除くようにしたら通った。なぜわざわざ面倒な実装をしていたのだろうか。

www.youtube.com

午前2時半就寝。

11/19(火)

本来なら発表準備を進めなければならないが、先週スライドが完成したので危機感が失せてしまい、この日は一日中布団の上でなろうを読んでいた。午前8時起床、正午から午後5時半まで二度寝、午後10時就寝。

11/20(水)

今日も夜中までずっとなろうを読んでいた。午前3時起床、午前8時から午前10時まで二度寝、午後5時から午後10時まで三度寝。

昨日の時点で今夜のCodechefがRated for Allであるという情報をキャッチしていた。モゾモゾ布団から抜け出して、午後11時半からCodechef Starters 161。

https://www.codechef.com/START161A

RGBMはP_i=iなる要素があれば1手で全体を一致させられる。そしてそのような要素がなかったとしても、N\ge 3であれば1手で一つ作ることができる。

ONETOTHREEは3をできるだけ1にしたくて、いろいろ手で試した結果3の連結成分ごとに考えて良さそうという結論になった。1と隣り合っていれば一つを残してすべて1にすることができ、また2,3,22,1,2にすることもできる。出したら通った。

QUICKEXIT0は頂点Nの祖先の子それぞれにKより小さい強さを割り当てたい。各部分木の中途半端な頂点にKより小さい強さが割り当てられていることはないとしてよいから、ある頂点がKより強いならその子もすべてそうであり、つまり脱出までの時間が部分木のサイズだけ増える。あとは貪欲。

そのままQUICKEXITも解いてやろうと意気揚々と進んだが、なんと解けなかった。残り時間が少なくなってきたので諦めて前2問に戻った。

MINMAXSUBは0と1のみで考えてみた結果両端の値で決まることが判明。具体的には、Nが偶数なら両端のMIN、Nが奇数ならMAXとなる。FREQXORはX\oplus(L+i-1)をセグ木の要領で\log個の区間に分割し、それぞれimos法でカウントした。

5完遅解きで22位、レートは2922→2900(-22)。残念。

MHC Tシャツ発送の受付が始まったらしいので、さっそく手続きしておいた。12/13までらしい。またホスフィンとの家飲みに向けてお酒をAmazonで注文した。日付は日記で言及していなかったと思うが、来週水曜日である。

発表の日がいよいよ近づいてきたので、原稿の作成を開始した。本来であれば火曜日の時点でパパっと書いてしまい、留学生にチェックをお願いした上で、内容を覚えたり発表練習したりする時間をゆっくり取れるという見込みだったのだが……。

午前9時半を過ぎてようやく完成し、留学生に送って寝た。

このくらいの時間には先週走ったDMOJのコンテストが終了していた。19分49秒で全完し、21秒差で2位。Bの実装が下手くそだったのと、Eを二分探索だと思い込んである程度実装してしまったのが敗因。しかしまあ簡単セットだったので、各問題の感想は特に述べない。

Arcadia Computing Contest 1 - DMOJ: Modern Online Judge

11/21(木)

正午前に起床し、原付で登校して学食で食事。今日は午後1時からワークショップに参加する。組み合わせ論の超有名人・Richard P. Stanley先生が東北大学に来られることになり、それに合わせて開催された。ちなみに先週から言っている自分の発表は二日目、つまり明日に予定されているものである。

Combinatorics@Sendai2024

Stanley先生は御年80歳。もともとこの秋ごろ、数週間の長い日程で日本に遊びに来る予定だったらしいが、それを聞きつけた人々がぜひ大学に来て話をしてほしいと持ち掛け、結果7週間に渡って中国・韓国・日本を練り歩く旅程が組まれたようだ。日本では、自分が知る限りだと他に津田塾大学東京大学でもご講演されたらしい。Webページに掲載されたabstractを見るとわかるように、内容はすべて同一である。

【談話会】Richard Stanley 氏(11月5日) | 数学科 | 津田塾大学

Lie群論・表現論セミナー | 東京大学大学院数理科学研究科理学部数学科・理学部数学科

東北大学のワークショップはこの行脚の掉尾を飾る。長旅の疲れとここ数日の冷え込みからか仙台に到着されたときは体調を崩し気味だったとのことだが、今日教室に見えられた姿、また発表の様子はずいぶん矍鑠しておられたように感じた。内容も分かりやすく美しかった。

二つ目の発表は、今年2月の日本数学会東北支部会と同じものだったはず。もともと非公式のセミナーという話だったのが公式ワークショップになったので急遽内容を変えたと言っておられた。四つ目の発表は出張して来られた先生のもので、黒板を使った大変エネルギッシュなものだった。自分が修士のときやっていたこととも関わりがあって、非常に面白かった。

本来予定されていた懇親会はStanley先生の体調が思わしくないということでキャンセルに。しかしせっかく来られた先生もいらっしゃるということで、教室に残っていた数人で店に行くことになった。ノコノコ着いていったら先生4人に対して学生が自分だけとなり、緊張で張り裂けるかと思った。

それから1時間半ほどゲーセンで遊んだ。8クレプレイして14+のAJが一つ。

帰宅してからしばらく明日の発表練習をした。いつの間にかスライドの内容を記憶していたので何とかなりそう。午前2時就寝。

11/22(金)

午前5時に起きて、二度寝できないままずっとなろうを読んでいた。午前11時くらいに登校。昨日原付を大学に置き去りにしたため今日は地下鉄を使った。

学食で食事してから教室に行き、設営と発表練習をした。昨日の時点でStanley先生の体調がどう転ぶかわからなかったが、幸い今日も対面で参加していただけるらしい。

午後1時半から自分の発表。最初Zoomの音声トラブルで少しもたついたが、以降はそれほど問題なく進められたものと、自分では思っている。Stanley先生や他の先生からの英語の質問も聞き取って返すことができた。発表時間が予定より短かったのはちょっと失敗。もう少しゆっくり喋るべきと指摘されたが、一方で別の先生からは自分の英語が十分聞き取れるものだったという感想を頂いた。

休み時間にStanley先生と黒板を使って議論する機会があった。ここは反省するべきところが多い。無言になると何か喋らなければと思って、自分のアイディアばかり口走ってしまったのだが、あの無言はたぶん考えている時間だったのだろう。じっくり待つべきだったのだと思う。それでも研究の方向性についていくつかご意見を伺えて、貴重な時間だった。

その後Stanley先生の発表。自分が今やっている研究の源流がStanley先生にあるということで、来仙の話が回ってきたとき発表していただけるようお願いしたのだが、昨日飲み会の場で聞いた感じだとかなり特別なことのようである。もともと観光メインで旅行しているところに、今日ここでしか使わない内容での発表をお願いしたのだから、それを承諾していただけたところにStanley先生のお人柄の良さが表れている。大変ありがたい。発表も非常にためになった。

解散後、2時間ほど別の先生と議論した。Stanley先生が自分の研究の源流ならこの先生は直接の親みたいな関係で、かなり細かいところまで踏み入った話を聞くことができた。同じ研究対象についての未出版のものを含む結果や、これからの研究の具体的な方針について。

学食で食事した後三人麻雀を1局打った。オーラスでリーチ・役牌・ドラ1・赤1・抜きドラ4の倍満を上がったが、トップが独走状態だったので順位は変動なしの2着。

午後9時少し前に帰宅。急いで準備してABC381に出た。

AtCoder Beginner Contest 381 - AtCoder

A、Bはよい。CはLRの連続する長さを前計算した。Dは隣接する2項を圧縮してから尺取り。特に(2k-1,2k)(2k,2k+1)のどちらをマージするかは両方試す。Eは二分探索して、LRをできるだけ端に寄せる。Fは右端としてあり得る位置の最小値を持つbitDP。

Gは全く分からなかった。というか眠すぎてまともに頭が回らない。ろくなことを喋られないので録画も打ち切ってしまった。6完20位。

日付が変わったくらいに就寝。

11/23(土)

午前5時起床、午前7時から午前10時半まで二度寝、合間はなろう。昼に学食へ行こうと思っていたが、なろうを読み進める手が止められなかった。しかしそもそも今日は祝日で休みだったらしい。

午後1時半を回って起床し、食事。また届いてから2週間くらい放置していたコンテストTシャツを開封した。

午後2時からUniversal Cup 18回目・Southeastern Europeセット。

https://qoj.ac/contest/1849

書く

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

estie Programming Contest 2024 (AtCoder Regular Contest 188) - AtCoder

書く

www.youtube.com

午後11時半からはCF combined、CodeTON Round 9。

Dashboard - CodeTON Round 9 (Div. 1 + Div. 2, Rated, Prizes!) - Codeforces

書く

www.youtube.com

地元の蟹が丸々一杯自分のところに回ってきたので、1時間ほど格闘して完食した。母親に食べ方を聞いたが、ふんどしを取って脚を外すだけで見たことのある状態に分解され、後は流れで食べることができた。使った道具は箸1本だけで、あとは手で脚を折りまくって何とかした。鋏の部分だけはどうしようもなく、箸で身を突き崩して吸い出した。しかし疲れた……。

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

11/24(日)

午後3時くらいに目を覚まして、二度寝できないままゴロゴロしていた。もともと午後6時には起きる予定で、それからちょっと外食して英気を養おうと思っていたのだが、その午後6時を目前にしてついに眠気が到来。

二度寝から目を覚ましたら午後8時半だった。急いで食事して午後9時からAGC069。

AtCoder Grand Contest 069 - AtCoder

Aは区間[l_1,r_1][l_2,r_2]をマージして[\max(l_1,l_2),\max(r_1,r_2)]を作るものと捉える。このことから、rを伸ばすのは常に1円で可能。一方lを伸ばすのは難しい可能性があるが、よく見ると1次関数の和になっているようだった。適当にマージしてみるとサンプルが合ったので、提出。しかしWA。

このWAの原因は、傾き-1の線分と傾き1の線分を同時に扱っていたせいらしい。あるいはf(x)ではなく\min_{x'\le x}f(x')を管理するべきだったとも言うことができる。よくよく眺めてみると、傾き1の線分は常に傾き-1の線分と相殺することができた。こうして傾き-1の線分と定数のみを管理するようにすると、何とかAC。

Slope Trickという直感は正しかったし、最後までそういうふうに解釈していればMINを取る操作もごく自然なものだったはず。アドホックに実装してしまったせいで1ペナ、さらにWAの原因に全然気づけず30分ほど追加で消費してしまった。

Bは最後のほうまで「以前の質問に対する返事」を有効利用できていなかった。行と列の適当な入れ替えで聞くマスを対角線に並べ、(1,1)から(N-1,N-1)までを一気に聞くことを考えていた。

このときYesが0回または2回なら確定。(i,i)を聞いた1回だけYesだったときに特定するには、(i,i),(i,N),(N,i)のいずれか1マスは0でなければならない。これを判定するにはN行目・N列目を固定したうえで最大2部マッチングを求める必要がある。N行目を固定した後DM分解を使って頑張ってみたが敢え無くTLE。さらにWAも大量に出ていた。

残り14分くらいでようやく見落としに気づき、正しい解法へ1歩踏み出した。つまり、(i,i)を聞いたタイミングで(i,i)\dots(i,N),(i,i)\dots(N,i)のどこかに0があればよい。しかしその実装方法がわからず時間切れ。1完125位でパフォーマンス2521、レート2922→2887(-35)。

コンテスト後もしばらくBを考え、エスパーでほぼ正しい実装方針にたどり着いた。質問する度、同じ行または同じ列の適切な位置に0があればよいから、その0と質問を対応付ける。逆に対応付けられた0の集合を選ぶとき、適さないものはどうなっているかというと、例えば(i_1,j_1),(i_1,j_2),(i_2,j_1),(i_2,j_2)のように2x2に並んでいる。これを許さないためには、辺(i,N+j)を考えて閉路を作らないようにすればよさそう。

ということで、S_{i,j}=0に対し辺(i,N+j)を考えて、閉路を作らないようにN-1辺選べるかという解法を投げた。しかしこれもWAの数が全然減っていない。ここで諦めてTLを見たら、次の盤面がYesであると言われていた。

011
111
111

手で試してみると、確かにそう。つまりN\ge 3の場合はN-2辺選べればそれでよかったらしい。半信半疑で修正して出したら、見事通ってしまった。このコーナーケースは1ペナ払って愚直を提出し気付いた人が多かったらしいが、自分はそもそも愚直が書けると思っていなかった。やはり長い間N-1手まとめて考えていたのが特大の誤りだろう。

www.youtube.com

12月のラノベ新刊をチェックして16冊注文した。またそうやって本を眺めているうちにAGCで落ち込んだ気分が元通りになってきた。日記を書き、学食で食事して、午後1時前就寝。

週記(2024/11/11-2024/11/17)

11/11(月)

午後3時起床。半からインターン先の定例会に出た。今週末に国際会議の締め切りがあり、また来週その内容について学内で発表する機会があるため、それまで稼働は難しいと報告した。

勉強会は業プロにおける設計の話。自分がこれまでインターンで書いたコードだと、肥大化した部分を都度切り出して関数化しながら進めていたように思う。それで、最後の最後になって情報が足りないことに気づき、かなり奥のほうまで手戻りが発生することが多かった。つまり、そもそも入出力の定義をせず書き始めていたのが良くない。そこをちゃんと考えれば切り出し方についてもより良いものが見つかったりするのだろうか。

解散後は先週の週記を書いていたが、コンテストをいくつか穴あきにしたまま午後10時過ぎに早々と投稿して、preprintへの加筆修正に取り組んだ。国際会議に出すのだから、正確にはpreprintではなくextended abstractである。長いので日記では論文と言及することにしたい。

非常に眠かったので、ほとんど進まないうち午後11時過ぎには寝てしまった。

11/12(火)

午前4時半に目を覚ました。二度寝しようとしばらく横たわっていたが、このままでは無駄に時間を浪費するだけだと判断し、起きて論文の作業を開始した。昼過ぎに学食で食事する以外はぶっ続けで取り組み、午後5時にひとまず加筆部分が完成。メールで送った後、文章の校正を始めた。

眠くなってきたので午後7時半に就寝。ところが4時間くらいでまた起きてしまった。仕方ないので校正を再開した。

数値計算にSageMathを用いたので、適切に引用する必要がある。公式ドキュメントだと「このように表示せよ」というサンプルが置いてあるだけだったが、調べていくとBibTeXにおけるサンプルを提供しているページを発見。さらにDOIも載っていて至れり尽くせりだった。

https://doc.sagemath.org/html/en/tutorial/afterword.html#how-do-i-reference-sage

Publications_using_SageMath - Sagemath Wiki

自分が行った計算に関してしばらく考え事をして、午前6時過ぎ就寝。

11/13(水)

午前10時半起床。昨日寝る前に考えたことを反映して少し計算を行ったが、実行が遅すぎて使い物にならなかった。

昼前に学食の「bush clover café」に行った。コロナ前は朝食セットとしてパンケーキやフレンチトーストにコーヒーが提供されており、朝から大学に来たときはよく使ったものだった。コロナ禍の長い閉店期間ののち、飲み物とデザートのみで再開していたはず。食事まで戻ってきたとは知らなかった。……とここまで書いたが、食事の提供が再開したのはここ最近ではなさそう。単に忘れているだけかもしれない。

購買に寄ったら森見登美彦「恋文の技術」の新版文庫本が出ていた。初版限定小冊子もついてくるため購入。この作品を最初に読んだときは意味不明で全く面白く思えなかったが、かなり経ってから再びチャレンジしたらいくらか機微を感じ取れるようになっており自分の成長を実感した、という思い出がある。

www.poplar.co.jp

帰宅してメールで届いたコメントを論文に反映。その後、来週使う発表スライドの準備を始めた。実は明日のセミナーで発表練習をする予定なのだが、まだ何一つできていなくて大変まずい。思ったより論文の加筆に時間がかかってしまった。

午後9時くらいに一旦できている分を先生方に送信。その後もスライド作成を続けたが、日付が変わるくらいに椅子の上でちょっと寝てしまったので、諦めて布団に入って就寝した。

11/14(木)

午前4時起床。スライド作成の続きに取り組んだ。午前11時過ぎに何とか完成。この午前中はTLに興味深い話題が二つほどあって、スライドと格闘している間チラチラ確認していた。

一つ目。AGC070のコンテストページが公開された。当初は開催日が12/22となっており、ICPC横浜大会と被っていた。帰るのは間に合わなそうなので後泊することを検討していたが、幸いすぐ一週間ずれて12/29になった。ただし今度は中学の同窓会と被っており、悩みものである。

二つ目。チュウニズムのアップデートがあった。隠し曲でついにLv.15+が出たのは実力的に縁遠い話で、自分は同時に追加された「What's up? Pop!」がniconicoジャンル初のLv.15になったことに驚いた。せっかく少し前に「マシンガンポエムドール」のAJを捻り出したところだが、ジャンルAJフィルはこれで剥奪だろう。それはそれとして、好きな曲なので来てくれて嬉しい。

正午、登校。昼休み中の学食は信じられないくらい混んでいた。友達と話しながらゆっくり食べた後、時間があったので院生室に寄って立体四目ならべで対戦した。お互い何度かの待ったを発動し、最終的には自分が詰んで終了。終盤は自発的な勝ち筋がなくなってしまい、置いても負けないマスがいくつあるかという問題になるらしい。

午後1時半からセミナーで発表練習。スライド完成がギリギリだったので当然原稿など何も用意していない中、英語で発表する必要があり、大変なことになった。単語や表現が全然出てこなかったので、そういうものを準備する意味でも来週までにはちゃんと原稿を書いておく。できたら留学生が校正してくれるらしい。

スライド中の文章についていくらか改善してもらい、午後3時半くらいに解散。1時間ほど院生室で時間を潰して今度は5限に参加した。予定されていた発表に入る前の雑談から発展して、今日は学部4年生が多様体微分形式、テンソル積について話してくれた。資料もなしによくぞあれだけ説明できるものだ。これが午後7時まで続き、本来の発表は次回にずれた。

学食で食事して院生室へ行ったが、今日は麻雀をする面子が足りない。すぐ帰宅することもなく、知恵の輪を解いたり立体四目ならべで対戦したりして午後10時過ぎまでダラダラしていた。知恵の輪はガチャガチャしていたら一つ解けたのに今度は戻せなくて、片手落ち。

帰宅後、論文をちょっと直して国際会議に投稿した。日付が変わる前に就寝。

11/15(金)

午前6時に目を覚まし、カクヨムを読んでいた。午前10時から3時間ほど二度寝。起きたら論文に関してちょっとしたコメントが届いていたので、修正して再投稿した。

久しぶりにゲーセンに行くか迷ったが、まだ寝足りないこと、論文の修正があったら即対応する必要があることを理由に今日はやめておくこととした。代わりに明日行くつもり。

布団に戻ってカクヨム。「【悲報】お嬢様系底辺ダンジョン配信者、配信切り忘れに気づかず同業者をボコってしまう~けど相手が若手最強の迷惑系配信者だったらしく動画がアホほどバズって伝説になってますわ!?」を読了した。

これは先週読んだラノベのWeb版で、正確には書籍化していない部分だけ読んだが、やはり面白かった。高すぎる主人公の実力にイベントが徐々に追いついてきて、ちょうど今ギリギリソロで活動できる範囲の話が一段落ついたところ。すると次はコラボでの活動が始まるらしい。話の転がし方が上手いと思った。

kakuyomu.jp

午後7時から2時間ほど、三度寝。午後9時半からCF #987 div.2に出た。

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

書く

www.youtube.com

ハーメルンを読んだりYouTubeを見たりしてダラダラ過ごし、午前5時過ぎ就寝。

11/16(土)

午前10時半に目を覚まし、二度寝できなかった。正午を過ぎたくらいに外出。昨日言っていた通り、今日は夜までゲーセンに行く。Universal Cupは日付が変わってから走る予定である。

昼食は以前見かけた蕎麦屋「味玄 十割そば」に入った。鴨南蛮そばにミニ天丼を付けたら思ったより多かった。そばを大盛りにしなくてよかった。

そのあと午後7時前までゲーセンで25クレプレイした。成果は上々。まず「What's up? Pop!」のSSSが出た。鍵盤を雰囲気で押したらかなりいい感じに通り、SSS+間近のスコア。しかしこのプレイ以外SSSすら出なかった。ラストを押そうとすればするほど押せなくなってしまった。

さらに14+のAJを四譜面増やした。今、98譜面あるようだ。出そうな譜面は他にいくつかあるから、3桁の大台にはすぐにでも到達できるだろう。

本屋で本を買い、スムージーを飲んで帰宅。寝過ごさないよう机に突っ伏して1時間弱仮眠し、午後9時からABC380に出た。

AtCoder Beginner Contest 380 - AtCoder

Aは頻度配列を作った。Bは適当にループ。Cはランレングス圧縮して要素をswap。Dは\lfloor(K-1)/|S|\rfloorを見て大文字・小文字のflipが起こるか判定。実際に操作を巻き戻す感じで実装したが、後から見返すと単にpopcountのパリティだった。Eは区間をsetで管理するテク。Fはメモ化再帰。Gはシャッフルする区間内の転倒数を引いてシャッフル後の転倒数の期待値K(K+1)/2\times 1/2を足せばよく、区間をずらしながら差分更新していく。

32分半で全完して5位。DはThue-Morse sequenceという。名前を聞いたことはあったが、調べるより自分で計算したほうが早いだろう。そもそも列を見てpopcountのパリティだと気づけない時点で遅いという話でもある。

コードゴルフとしてAとBをNibblesで解いた。Aはよくわからない。Bは文字'|'でsplitしてそれぞれ長さを数えればよく、非常にシンプルな7Bが得られ、さらにImplicit Opsでmapの1Bが削れる。

www.youtube.com

シャワーを浴びて午前0時からUniversal Cup。今日は17回目、Jinanセット。

書く

DMOJで開催されていたunratedのコンテストに参加してみた。実はタイトルの「Arcadia」を音ゲー「Arcaea」と読み間違えていて、関係のある問題文が読めるものと楽しみにしていたのだが、ただの勘違いなので全然そんなことはなかった。期間は来週木曜日まで。

Arcadia Computing Contest 1 - DMOJ: Modern Online Judge

カクヨムで「【本物】オカルトVtuber【現る?】」を読了。画面越しに視聴者に対して直接影響力を行使できる、主人公の能力の設定がかなり好きだった。それを用いたアンチへの対処が爽快。ブロックとか開示請求とか、仕方ないけど迂遠な手段だなあと常々思っていた。

kakuyomu.jp

午前10時半就寝。

11/17(日)

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

AtCoder Regular Contest 187 - AtCoder

Aは大変。とりあえず前から適当に操作を繰り返すことでA_1\le\dots\le A_{N-2}とできる。さらにA_{N-1}\le A_Nが成立すれば、i=N-1での操作を2回ずつ繰り返すことで、ほかの大小関係を崩さずA_{N-2}\le A_{N-1}とできる。ここでA_N\lt A_{N-1}\lt A_N+Kであるケースが問題となる。N=2なら不可能。そうでないなら、i=N-2で2回操作すればよい。

Bは\min(A_1,\dots,A_{i-1})\gt\max(A_i,\dots,A_N)という位置で連結成分が切れるから、逆に各iに対しそこで切れるAの数を数え上げればよい。\min\maxのどちらかをO(M)かけて全探索すれば、後は簡単な組み合わせの問題になる。

Cは、PからP'を作る際、Pの累積maxの更新点を後ろに動かすということをする。動かした要素はP'でも累積maxの更新点となるから、逆にそこからいくつか選んで前に動かせばPが復元できる。更新点の選び方とPは一対一に対応するため、更新点の数をk個とすればP2^{k-1}通り。ここで1引いているのは、必ず選ばれるP_N=Nの分である。

あとは適当にdp。kを具体的に持つ代わり、遷移の度に値を2倍すればよい。自分は大きな値から順にQに埋めつつ、これまで埋めた要素のうち最も前にあるものの位置を状態として持った。

Dは雰囲気が全然違う問題。Xの最小値mを固定すると、C_i=C_i(m)の値は高々一意に定まる。答えは\min_m\max_i C_i(m)-m。ここでC_i(m)mについて広義単調増加だから、\max_i C_i(m)もそうなっている。よってC_k(m)を追加する際は、chmaxなんて高等なものは必要なく、二分探索して求めた区間への代入さえできればよい。答えも含めてすべて遅延セグ木に乗る。

この時点で順位表を見たら3位だった。時間も1時間ほど残っており、全完チャンス。ドキドキしながらE問題に臨んだ。

Eは操作の逆を考えるとよい。長さ3の区間を選び、三つのうちどれかの要素で残りの二つを置き換えるというものになる。一度消えた要素は復活しないから、操作しない(できない)という自明なケースを除けば、作れる順列にはAに出現しない要素が二つ、距離0か1で存在する必要がある。

さらに、操作の逆は数の連結成分を大きくしていると見なせる。つまりAにおいてある数が非連結に出現している場合は0通り。さらに、Aに出現する数の順番が順列においても保たれていないといけない。ただしcyclic shiftはできるようだ。例えばサンプル3だと四つの数の順番が固定されているから、円順列(4-1)!10!を割ったものが答えになっていると解釈できる。

あとは数え上げ。Aに出現する要素の集合をX、出現しない要素の集合をYとし、まず具体的な値は忘れてXYの2タイプの並べ方を考えた。cyclic shiftができるなら、ひとまず先頭はYとしてよく、\binom{N-1}{|X|}通り。ここから、Yの間に常にXが二つ以上挟まるケースを除く。|Y|個の隙間に|X|-2|Y|を挿入する場合の数であるから、重複組み合わせで求まる。

具体的な値についてはXYで独立に数えられる。Xのほうは順序が決まっているため、|X|通り。Yについてはいったん先頭要素を固定して(|Y|-1)!通りとする。最後にcyclic shiftを考えてN倍すると答えが求まる。

ところが7ケース落ちてしまった。cyclic shiftができるという部分はまともに議論していないが、よく考えてみると幅2ずつずらせるだけの気がする。操作にほぼ自由度がない|X|=N-2のとき、かつNが偶数だとまずそう。実験コードを書いて確かめると、確かに倍の値を出力してしまっていた。2で割るコードを提出すると、今度は4ケース落ち。

もう一度試していたら、N=4のときもともと正しい答えを出力していたのに、半分にしてしまっていたのを発見した。それだけで4ケースも落ちるかと首を傾げつつ、残り時間もないのでとりあえず提出してみると、なんとAC。意地の悪いコーナーケースが四つも入っていたらしい。

何はともあれ全完。3位だった。ARCでは初めての全完である。難易度改定で簡単になったからという理由もあるかもしれないが、それでもEは本番7ACだったから、そこまで極端に簡単というわけではなさそう。

Eには結局50分ほどかけた。それだけの時間で合わせきれたというのはかなり運が良かったと思うが、それでも最後の1問にコンテスト時間の半分を残せた点で、Dまでの出来は会心。AはともかくBCDでほぼ詰まらなかったのが効いた。

午後11時半からはCF #988 div.3に出た。

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

Aはよい。Bはソートして尺取り。a_i^2=k-2となるケースに注意する必要があるが、自然に実装するとそれより先に正しい解が見つかった。Cは[2,4,5,1,3]の左右に偶数と奇数を並べた。Dは優先度付きキューで貪欲。

Eは、f(1,n)=0なら特定不可能で、それ以外は必ず可能。f(1,r)\gt 0ならf(1,r)-f(1,r-1)を見ることでs_rの値とs_1\dots s_{r-1}に含まれる0の個数が分かる。後者の情報を使うとf(1,r)=0となったところでs_1\dots s_rも確定させられる。

Fは二分探索。Gは約数包除だが、係数を愚直に前計算したら間に合わなかった。出力してみるとメビウス関数の符号反転だったので、そちらで実装。ついでに係数が0であるような約数を無視すれば、前計算が1secちょっとで終わるようになった。

52分で全完して6位。Gが遅かった。つい最近ARC185Eにおいて同じ方法で係数の計算をしたが、その係数の正体や数学的な説明について全然理解していなかった。

www.youtube.com

朝まで日記を書いていたが、集中を切らしてカクヨムに手を出した。2作読了。

「先輩ヒロインの同級生に転生してしまった...」。話の展開が遅いなと思いながら読み進めていたら、15話で主人公の様子が急に変わった。おかしくなったと言ってもいいかもしれないが、自分としてはこういう振り切れたキャラは好み。

kakuyomu.jp

「【朗報】引退した元S級探索者、またF級からやり直すらしい」。文章がゴテゴテしており、主人公のキャラもあまり好きになれず。

kakuyomu.jp

シャワーを浴びて昼前に学食に行ったら、バナナが売られていてびっくりした。1本70円と値段も手ごろ。自分が取ったものだけでなく、並んでいたものは軒並みかなり黒ずんでいたが、もしかしたら別の学食で使い切れなかった分が回ってきただけの一時的なメニューかもしれない。

ラノベを買って帰宅、午後0時半就寝。

週記(2024/11/04-2024/11/10)

11/04(月)

正午から2時間半ほど起きてなろうを読んでいた。それから二度寝して午後7時起床。

先週の週記が全然書けていない。日付が変わるまで頑張ったが、結局スカスカのまま投稿した。その後朝方までかけていくつかのコンテストについては追記をした。

先週月曜日のECR171の結果を確認したらF問題がMLEで落ちてしまっていたので、何とかしようと3時間ほど格闘した。dp配列を必要最低限の長さのvectorにしたり、永続データ構造をvectorの添え字ではなくポインタを使って実装したり、なんちゃって参照カウントを実装して不要なデータを削除したりとできることはやったつもりだが、残念ながらテストケース191が突破できなかった。おそらくオンラインで解いている限りは通らないのだろう。最終的に諦めてしまった。

https://codeforces.com/contest/2026/submission/289973571

Fは一旦普通のSWAGを書いて、それを永続化した。

週記(2024/10/28-2024/11/03) - kotatsugameの日記

フラッシュゲームの麻雀で四暗刻を上がった。運だけ麻雀。

ラノベ異世界に放置ゲー理論を持ち込んだら世界最強になれる説」を読了した。ベテラン冒険者の基準がレベル15だったり、第四級魔術を行使できれば天才と呼ばれたり、レベル制があるのに数字がやけに小さい。主人公は1巻時点でどちらも達成しているが、特に後者については第十五級まであると最初に言及されており、世界最強への道のりの遠さを強く感じてしまった。

先週末メールで送ったpreprintに対して返信があり、国際会議に出してみてはどうかという提案をされた。締め切りは来週金曜日とかなり近いが、投稿に向けた調整くらいなら間に合うのかもしれない。とりあえず指導教員の先生に相談することにした。

午前11時半就寝。

11/05(火)

午後10時起床。今日はラノベを読む日だった。

「ツンな女神さまと、誰にも言えない秘密の関係。」2巻読了。面白かった。主人公は生徒会長として統合前の学校において多くの人望を集め、また動物にもやたら好かれるらしい。憧れの対象として遠巻きにされているヒロインとの対比もあり、作品に合った好ましい設定だと思った。

「異能学園の最強は平穏に潜む」4巻読了。これも面白かった。3巻までで1学年の各クラスとそれぞれ1度ずつ戦った主人公が、もう潜む必要はないと言い出して表舞台に立つ準備を始めた。これから徐々に主人公の実力が公になっていくかと思うと興奮。その一環として、ついに最上位ランクの能力の情報が解禁された。漢字一文字に関する概念を操るとのことだが、主人公が持つのは【霧】なのだろうか?ここまで来てもまだ底が見えないので、もう一捻りあってもおかしくない。

昨日の国際会議の件に関して、挑戦してもいいんじゃないかという雰囲気の返信があったので、少し作業をしてみた。公式のフォーマットを適用して内容をいくらか削ったところ、ページ数制限には十分収まるようになった。削った部分の前後の表現は書き直す必要があるが、ともかく何とかなりそう。とりあえず今日はここまでとして、ラノベに戻った。

「俺は星間国家の悪徳領主!」9巻読了。主人公の師匠・安士を探して宇宙を旅する巻。探し当てるだけにとどまらず最終的には主人公と共に本星に戻ってくることになり、さらに師匠の指示で主人公とヒロインの結婚についても話が進んだ。このタイミングで師匠がメインキャラに返り咲くとは思わず、かなりびっくりした。

「【悲報】お嬢様系底辺ダンジョン配信者、配信切り忘れに気づかず同業者をボコってしまう」読了。たまに読みたくなる現代ダンジョン配信モノ。設定も1巻時点の展開もテンプレ的だと感じたが、そもそもこのジャンルが好きだからか、あるいはさすがベテランラノベ作家ということなのか、かなり面白い。次から次へとイベントが巻き起こり、読み進める手が止まらなかった。

学食で食事し、ラノベを購入して帰宅。午後3時半就寝。

11/06(水)

午後11時起床。

Yandex Cup Algorithm部門の決勝進出のメールが来た。今年の12月初週は特に何もないので当然参加。昨年は参加フォームへの回答後に向こうから何通かメールが来て、フライト日程を決めたりパスポートのスキャン画像を送ったりしたが、今年は参加フォーム自体にそれらが含まれていた。

特に、自分でフライト日程の希望を出す必要がある。幸いmaroonさんがいい感じのものを見つけて下さったので、日本人参加者はそれに合わせることとなった。希望が通らなくても、まあ揃っては行動できるだろう。ちなみにウズベキスタンと日本の間には直行便があるらしい。

「【悲報】お嬢様系底辺ダンジョン配信者、配信切り忘れに気づかず同業者をボコってしまう」2巻、3巻を読了。面白かった。主人公の巻き込まれる事件がどんどんインフレしていくが、いつも傷一つなく余裕で切り抜けていくので、いったいどれだけ強いのかわからない。

3巻が主人公の炎上騒動を解決しようと動き始めるという非常に気になるところで終わったため、カクヨムで4巻相当分を読んだ。やはりこの主人公は深層でも余裕だったらしい。レベルがどれくらいあるのかはまだ隠されているが、いったいどれだけとんでもない値が出てくるのだろうか。

kakuyomu.jp

午前5時半就寝。

11/07(木)

午前8時起床。シャワーを浴び、学食で朝食を摂って、ホスフィンの研究室に向かった。今日は執筆合宿。

午前10時から学食での昼食を挟んで午後4時過ぎまでpreprintに関する作業をしていた。月曜日にもメールをいただいた先生から内容に関する詳細なコメントが届いたので、それを反映しようとしたが、追加で必要になったデータを計算するに当たっていろいろ調べものをしていたらかなり時間が食われてしまい、残念ながら進捗はあまりない。

解散後は5限に参加。今日は留学生が平方数の逆数の和を与えるいくつかの証明を発表してくれた。まさに立て板に水といった話しぶりで、ついていくのも必死。ちょっと注意が必要に見える式変形もバンバン飛ばすが、あれはわかってやっていたのだろうか。突っ込む暇もなかった。

今日はソードアート・オンラインの作中でゲーム・SAOがクリアされたちょうどその年、その日だったらしい。先月末にはキリトとアスナの結婚記念日の話題も流れてきたが、そもそもあの作品が2024年を舞台としていたことを完全に忘れており、驚いている。

学食で食事した後麻雀。2半荘打って飛び終了の4着と3着。ボロボロだった。

午後11時過ぎに帰宅してからは夕方の数値計算の続きをしていた。午前5時半就寝。

11/08(金)

正午起床、登校。昨日ICPC横浜大会の旅費補助がチーム全員分まとめて振り込まれたので、ゆうちょ銀行に寄ってメンバーそれぞれに送金した。そういえば今年は横浜のホテルが信じられないくらい高く、例年使っていたホテルもとても泊まれないような料金になっていたのだった。どうしようか。

最近、学食のメニューにカレーの大サイズの上「メガカレー」が追加された。3食毎回食べるならともかくとして、1日2食くらいであればちょうど腹が満たされる量だと思う。

午後1時から執筆合宿2日目。今日は結構進めることができた。またホスフィンと3月以来の家飲みを開催することにして、日付と店を決めた。

今日は焼肉「仔虎」。

週記(2024/03/11-2024/03/17) - kotatsugameの日記

午後7時に解散し、学食で食事したあと今日も麻雀を打った。まず1半荘、それから一人抜けて三人麻雀を2半荘。それぞれ4着(飛び)、2着、3着(飛び)と昨日に引き続きボロボロだった。確か2回くらいしか上がれなかったと思う。高い手が入ってリーチしたのにダブロンされて計2万点の支払いとなったときが一番つらかった。

そんな感じで自分は全然上がれないくせして、やたらと放銃してしまう。降りるのが下手くそすぎた。一度手を崩したならちょっといいところをツモって来た程度のことで再度上がりを狙ってはならない。

コンビニに寄って、日付が変わるくらいに帰宅。たいぺーから絵葉書が届いた。

午前1時就寝。

11/09(土)

午前6時に目を覚ました。

FPSゲームのコーチを引き受けたら依頼主が人気VTuberの美少女だった」2巻読了。面白かった。主人公もいよいよプレイヤーとして表舞台に立つにあたり往時の実力を取り戻して、詳しい描写こそなかったがかなり暴れまわったようだった。

「四刀流の最強配信者」読了。表紙で清純そうな顔をしている女神が思いっきり邪神のような行動をしていてたまげた。ちょっと主人公に都合が良すぎる点もあるが、ゲーム上達のためにリアルでも特訓していたのが今活きているという設定は受け入れやすかった。

3時間ちょっと二度寝して午後4時半起床。シャワーを浴びて午後5時からUniversal Cupに出た。今日は16回目、Nanjingセット。

https://qoj.ac/contest/1828

書く

途中抜けして午後9時からABC379に出た。

Toyota Programming Contest 2024#11(AtCoder Beginner Contest 379) - AtCoder

A、Bはよい。Cは「ちょうど1個ずつ」を見落として大変な目にあった。Dは全体に足された値を別で管理するいつものテク。優先度付きキューを使ったが、先に植えられた植物のほうが当然高いから普通のキューで十分だった。Eはmodを取るならよくある問題なので立式はすぐできる。それを10のべき乗ごとにまとめて計算し、繰り上がりを処理すればよい。Fはやるだけ。

GはW\le Hとして1列持つdpをした。O(HW3^W)通りの状態すべて見たらTLEしてしまったが、冷静になるとvalidなのはO(HW2^W)個のみである。そこで値が0の状態はスキップすることにしたら、問題なく間に合った。

40分弱、3ペナで全完。当然ペナ消化など待つはずはなく、振り返りも撮らず即座にUniversal Cupへと戻った。最終的には14位だった。

感想戦を終えて解散してからの1時間弱で改めてABCの振り返りを撮り、午後11時半からCF #985 combined。

Dashboard - Refact.ai Match 1 (Codeforces Round 985) - Codeforces

書く

www.youtube.com

www.youtube.com

「女友達は頼めば意外とヤらせてくれる」5巻読了。自分の手で丹精込めて作ったコスプレ衣装を着たまま行為に及ぶのはさすがにあり得ないと思う。ストーリーについて、次巻では1巻以前に主人公の女友達だった既存のキャラに焦点が当たるらしい。このまま新キャラがヒロインになるのを繰り返し続けるものと思っていたので驚いた。

しばらくハーメルンを読んで午前10時就寝。

11/10(日)

午後4時半起床。AHC039に1時間ちょっと参加した。

THIRD PROGRAMMING CONTEST 2024(AtCoder Heuristic Contest 039) - AtCoder

入力生成方法を確認し、クラスタリングして細い道で繋ぐという解法を考えた。しかし「クラスタリング」「細い道で繋ぐ」のそれぞれ実装が難しいし、さらに周長の制限も厳しい。とりあえず群平均法を使った階層型クラスタリングを実装してみたところ、実行に5secくらいかかったので、そもそもこの解法には無理があると判明した。

しかし点が集まっている箇所をうまく抜き出す方法が思いつかない。この際適当なものでも出そうと思い、[L_x,R_x]\times[0,10^5][0,10^5]\times[L_y,R_y]としてそれぞれスコア最大のものを取り重ね合わせた十字の多角形を出力してみた。246334点。そこから十字の四方向を適切に縮めてみたところ323201点まで上がった。

ここで疲れ果てて布団に戻った。最終的には157位、パフォーマンス1752でレート変動は2314→2315(+1)。どうやら盤面を固定サイズのブロックに区切ると点が集まっている箇所をおおむね抜き出せたらしい。また、いくつかの長方形領域を細い道で繋ぐのはやはり実装が困難だったようだ。

二度寝して日付が変わったくらいに起床。午前0時半からCF #986 div.2に出た。いつもより1時間遅いのは、もしかしたらAGCとの衝突回避だったのかもしれない。結局そのAGCはさらに先にずれていった。

AGCが11/10にずれていた。

週記(2024/10/21-2024/10/27) - kotatsugameの日記

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

書く

www.youtube.com

朝まで日記を書き、学食で食事してラノベを買い、正午に就寝。

週記(2024/10/28-2024/11/03)

10/28(月)

午後4時少し前に起床してインターン先定例会に出席。昨日寝る前に、今日の定例会は普段より30分遅く始めると告知されていた。

進捗はなし。勉強会は書籍の売り上げ予測の話だった。本の売り上げのピークは発売日に来ると思っていたが、実際はそれより数日遅れるらしい。考えてみればほとんどの本を予約購入している自分でも、大学生協の営業日などが影響して発売日当日に入手することはむしろ少ない。そして売り上げに計上されるのは自分が店頭でお金を支払ったタイミングなのである。

定例会後に大学生協へ。およそひと月ぶりにブラックサンダーを箱買いしたら、720円から880円へと大幅に値上げされていた。生協が暴利を貪っているわけではなく、今はメーカーで買ってもそのくらいになるようだ。自分が買い始めた4年前はドンキに行けば550円弱で手に入ったが、そちらはどうなっているのだろう。

予約していたラノベを受け取り、学食で食事して帰宅。それから先週の週記を書いて、午後11時半に切り上げて投稿した。いくつかのコンテストが穴あき。

少し後からECR171に出た。

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

Aはよくわからないが、A問題であるということを考えて長方形内部に正方形を取り、対角線を出力すると通った。Bは二分探索。nの偶奇により1点追加するか否か、またペアの作り方もほとんど決まる。64bit整数をうっかりlongと書いてしまって1WA。このミスをしたのは本当に久しぶり。Cはn日目から降順に適当な貪欲をしたら通った。Dは算数を頑張る。

なんとEが解けなかった。4完114位。あまりの出来の悪さに絶望し、コンテスト終了直後に録画データを削除した。TLでEが燃やす埋めるだと知り仰天。解法ガチャでフローまでは出たのに、この典型を完全に忘却していた。

その後EとFをupsolveした。Eは知ってしまえば簡単。Fは一旦普通のSWAGを書いて、それを永続化した。必要になる永続stackはABCで既出であり、根付き木によって非常に簡単に実装できる。しかしやっぱり永続化されたデータ構造は魔法のように見えるな。

動画を見たりしてグダグダ過ごし、午前5時半就寝。

10/29(火)

正午起床。ハーメルンで「プーサーなオリ主とコナン君」を読んだ。ファンタジーの産物を積極的に公開していてびっくりするが、これはこれで気分が良い。

syosetu.org

そのまま布団の上で二度寝、三度寝と繰り返していたら火曜日が終わりかけてしまった。以降は次の日の日記へ回す。

10/30(水)

10/29 午後10時半起床。木曜日のセミナーに向けてpreprintの加筆修正を始めた。最初は気分が乗らずちょくちょくなろうを読んでしまっていたが、エンジンがかかってきてからは結構ガリガリ書き進めることができたと思う。本来は火曜日のうちにある程度進めておきたかったのに、うっかり寝て過ごしてしまったので、その危機感もあった。

掲載するつもりのデータの生成も並行して行った。いつでも作れると思っていたが、実際計算させてみるととんでもなく時間がかかり冷や汗。序盤の見積もりでも夕方ごろまでかかる予定だったのに、後半に行くにつれ扱うデータが大きくなって予想以上に遅れ、結局夜までかかった。ギリギリ間に合う時間に計算を始められてよかった。

昼は学食。先週噛んでしまって傷つけた下唇の内側が今日になって一段と痛むようになり、口を動かすのが辛い。その点ラーメンという選択肢はなかなかよかったのではないか。レンゲを使うと唇をあまり動かさずに食べられた。ラノベを買って帰宅。

夜まで作業を続け、午後8時になって何とか完成。preprintをメールで先生方に送った。

集中講義の課題レポートも提出し、午後9時就寝。

10/31(木)

午前1時に目を覚ました。preprintの英語に関する指摘が来ていたので反映した後、シャワーを浴びてラノベを読み、午前7時前にもう一度寝た。

今度は午前9時半くらいに目を覚ました。もう少し寝ておきたいなと思いつつスマホを触っていたが、午前11時過ぎというもうそろそろ起きなければならない時間になってうっかり入眠。次に起きたら午後1時半、セミナー開始の予定時刻だった。寝坊である。

メールで一報入れて即登校。午後2時前に到着してそのままセミナーを開始した。特に何も言われなかったのが怖い。セミナーでは昨日送ったpreprintの改善点についていろいろ指摘してもらった。それらをなるべく早く反映して、今度は別の先生にも送る予定。1時間ちょっとで終了した。

先々週と同様、同じ教室で行われる5限のセミナーにも顔を出す予定。ただしそれまでの時間は特にやることもないので一旦解散となった。ちなみにそのセミナーでは、先週ベルトランの仮説を証明したらしい。かなり興味があるので、帰省で聞き逃したのは残念だった。

院生室に移動すると、持ち込まれた私物に関して少々問題が発生していた。学生相談室に行く人々に着いて行ったりした結果抜け出すタイミングを見失い、5限にはかなり遅れての出席となった。

学食で食事して午後7時から麻雀。今日は原付で登校したため、終電を気にせず日付が変わった午前1時過ぎまで打っていた。かなりツイている日だったらしく、4半荘でトップが2回か3回、面前で清一色を上がった。待ちは自分ではすぐわからず、慣れている人の助けを借りた。

写真の手は四・七萬のみらしい。タンヤオ一盃口が付いて倍満だが、一盃口を見落として跳満で申告してしまった。後日このツイートを見た父に「三連刻」というローカル役を指摘されたが、そういう系はほとんど採用していない、はず。そもそも詳しい取り決めがあるほど打ち慣れていない。

帰宅後、ラノベ「恋愛魔法学院」2巻を読了。面白かった。やはり主人公の造形が好みである。また周囲のキャラも主人公に寄りかかりすぎず自立しようと努力していて、そういう人々に対してなら主人公が少し手を貸すのは全く気にならない。心地よい関係性を築けているなと思った。

午前9時半就寝。

11/01(金)

午後2時過ぎ起床。院生室の私物問題に関して専攻長が視察に来るかもという話が昨日あったので、顔を出すことにした。昨日は他人事みたいな書き方をしたが、実は関係している。詳しくは伏せておきたい。

ところが登校してみると、そもそも専攻長が今仙台にいないということで、少なくとも今日は視察がないことが確定した。仕方ないので麻雀が始まる夜まではpreprintの修正を行っていた。しかしこういう個人作業をするのであれば、モニターが複数枚あるとか、机が広くて綺麗とかの理由で、やはり自宅のほうが快適だろう。

午後6時半に学食で食事して、それからいよいよ麻雀。今日は1半荘だけだった。ラス親がトップに立ってもなかなか上がり止めをせず、確か4本場まで突入。トップ狙いで強気に行ったら振り込みまくって、一時はラスまで落ち込んだが、それを上回る放銃をした人がいて3着に浮上した。

院生室に戻ってもう少しpreprintに関する作業を続けた。大学のいいところはMathSciNetが使えるところ。.bibファイルの中身を全部MathSciNetで出力し直すと非常に綺麗になった。

午後11時帰宅。10月の読書記録をツイートした。ネット小説の月だった。

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

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

Aは\sum aの値とその偶奇を見ればよい。Bは3分割して、真ん中の列を[k]または[k-1,k,k+1]とする。Cは小さいほうから二つの和が最大値を超えることが条件。2番目の最小値と最大値を見ながら尺取りする。

Dはまず線形探索でp_i\gt 0となる最初のiを見つける。これにクエリがi-1回。その後はpの値が2以上n-2以下の範囲で単調増加するので、尺取りっぽくすれば高々n-3回の質問ですべて特定できる。i\le n-1なので、計2n-5回と見積もれた。実際にはp=n-2となる場合クエリを投げなくても確定しているとか、i=n-1ならその後の質問が一切必要ないとかで1回以上減り、通る。

Eは大変。iに対する操作回数をv_iとして、まずb_i:=v_i+v_{i+1}についてa_i+b_{i-1}=a_{i+1}+b_{i+1}という式を得る。ここからbの値はoffsetを除いて一意に定まり、vの値はどこか一か所固定するとぐるっと一周してすべて決定する。その固定した値はbの交代和の半分でなければならないが、交代和が偶数にならなくてもoffsetを1ずらせばよい。最後にv全体に適当な値を足して非負にすれば完成。ただし最大値が1018を超えないことはよくわからなかった。

Fは分割した列の後ろのほうが後手勝ちならNim、先手勝ちならMisere Nimという最後の石を取ったほうが負けるNimの変種になる。後者の勝利条件も既出で、普通のNimとそれほど変わらない。dpも多少面倒だが頑張ればできる。a=1が連続する部分をうまく扱うため、後ろから見つつ最後にa\gt 1だったインデックスを管理した。このインデックスを前に動かすとき、同時にdp遷移の準備をする。

sigma425.hatenablog.com

全完13位。Dのクエリ回数の見積もりでかなり手間取ってしまった。

www.youtube.com

そういえば、今日寝ている間に海外から荷物が届いていた。開けてみるとthink-cell Round 1の賞品の靴下。足裏に右辺値・左辺値と書いてあるのは面白いなと思った。

シャワーを浴びてからpreprintの作業に戻った。少しだけのつもりがなんだかんだ完成するまで続けてしまい、午前7時ごろメールを送信。午前7時半に寝た。

11/02(土)

午後2時直前に起床。また寝坊しかけた。飛び起きてUniversal Cup、今日は15回目のChengduセット。

https://qoj.ac/contest/1821

書く

食事して、午後9時からABC378。

AtCoder Beginner Contest 378 - AtCoder

書く

振り返りはギリギリ間に合ったが、動画を投稿している暇はなかった。午後11時半からCF #984 div.3。

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

Dまでやるだけ。Dは面倒なだけの嫌がらせ問題だった。Eは列ごとに単調性があるので条件が区間で表せる。区間の端点を表す変数rと入力のrを被らせるというポカをやらかして1WA。Fは区間の数の総XORとinterestingでないものの総XORを求める。

Gは大変。まず最上位bitが同じ数の区間に分割し、それぞれで聞く。これによってa\oplus b\oplus c=0でも確実にどの区間にあるか、さらに最上位bitが立っているかを見ることで具体的に何個かまで確定させられる。ここまでで\log_2 nクエリ。区間内に1個ある場合はこの時点で値まで確定しており、2個ある場合は二分探索で求まる。

3個ある場合が大変で、単に二分探索を2回行うだけでは2\log_2 nクエリになって微妙にオーバーしてしまう。そこで区間を2分割して、どちらか片方に3個ある場合どんどん再帰していくのを繰り返す。どこかのタイミングで2個と1個に分かれるが、1個なのが左右どちらかは実際に1回クエリを投げれば判定可能。2個のほうの区間を二分探索すると、これまでの再帰と合わせて\log_2 nクエリになる。

全完、Gで手間取ったが12位。

www.youtube.com

www.youtube.com

何とか動画2本の投稿まで間に合わせ、午前2時からMHC Round 3に出た。

Meta Hacker Cup - 2024 - Round 3

書く

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

11/03(日)

午後2時半起床。シャワーを浴びて目を覚まし、午後3時からTROC #40に出た。

https://tlx.toki.id/contests/troc-40

Aは|X|\le NK。Bは、どちらが勝ってもレーティングの集合はX\gt Yとして\{X+1,\max(Y-1,0)\}に変化する。Cは一つで割引が得られるものを取り除き、もう1回割引されるかを調べる。DはRを固定して各要素を区間に含めたときの寄与を考え、最も良いsuffixをセグ木で求めた。

Eは爆破する鉱山の数kを全探索。Aが大きいほうからk個を爆破することになり、残りは必要なだけ\max(A)の採掘を間に挟んでいく。k-1個挟んでも足りなければ、Aの最大値と2番目の最大値を交互に採掘する。

Fは有向全域木に見えてかなり悩んだが、とりあえずコスト計算のコードを書いたところでS_iからS_jを作るコストとその逆が等しいことに気づいた。よって無向辺だと思って最小全域木を求めればよい。

Gは最小値から左右に伸ばしていくdp。遷移できるかの判定には直前2項が必要なので左右でO(N^4)状態になってしまうように見えるが、片方が値を大きく飛ばしたならそれを全部もう片方が拾わなければならないので、実はO(N^3)状態しかない。

Hはずっとフローを考えていて全然気づかなかった。実は、セッションiでin-personとされたクラスそれぞれに生徒iを割り振るだけでよい。もし生徒iがonlineでしか参加しないセッションjがあるとすれば、それはすなわちX_{i,\ast}X_{j,\ast}がdisjointということになり、明らかに矛盾する。そのようなセッションがなければ、onlineの生徒は常にin-personな生徒の真部分集合となっている。

滑り込み全完で6位。レートが3024→3031(+7)と微増し、ついにランキング一位に立った。

今日の夜はインドカレー屋「RAJ」で食べることにした。入店時は空腹でいくらでも食べられるつもりだったが、用心して頼んだ少し安めのセットでもギリギリだった。

この後のコンテストに備え、ゲーセンには行かずに帰宅。3時間ほど仮眠をとって午後10時半に目覚めた。かなり眠かったが30分の間に少しマシになり、午後11時からYandex Cup Algorithm部門のSemifinalに出た。

Enter — Yandex Cup 2024 — Algorithm — Semifinal — Yandex.Contest

Aは行・列独立に貪欲でよい。Bは\sim\le tである確率のn-1乗をt=0,\dots,k-1で足し合わせる。Cは予め隣接行列の2べきを計算しておき、クエリごとに適切に選んで掛け合わせる。このとき行列積ではなく行列とベクトルの積を求めるようにすれば、計算量がO((n^3+qn^2)\log k)になって間に合う。

Dは算数。基数ik+1桁以上の数は\max(R+1-i^k,0)-\max(L-i^k,0)個あるので、これを足し合わせる。k\le 4は二分探索でiの範囲を求めた後、4乗和の公式まで埋め込んで計算した。k\gt 4は十分少ないので毎回ループを回して計算。

Eは素因数ごとに木を圧縮して計算。といっても頂点を抜き出しているだけで、元の木における距離さえ高速に計算できれば圧縮木を構築しなくても最遠点は求まる。その距離の計算にはO(\log n)かけたが、1.2secで通った。

Fはstを全部連結した文字列のSuffix Arrayを使う。クエリごと、部分木の各頂点について対応するtをprefixに持つ区間+1しておき、sの各suffixの値を取得したい。木をdfsして入る瞬間と出る瞬間の差を見ればよい。区間加算がn回、1点取得が2\sum|s|回となった。

1時間21分で全完して4位。疑いようもなく決勝進出である。直近、大きな大会としてJapan OpenとMHCの予選もあり、どちらも落ちてしまったが、三つ目にして海外旅行を引き当てることができて非常に嬉しい。

日本人の決勝進出者は、順位表を信じるなら7名。昨年はペナありの順位表が終了後しばらくしてペナなしに書き換えられ、それで順位の変動が結構あったのだった。今年は最初からペナなしになっていたので、正しいものが表示されている可能性が高そう。

その7名のDiscordチャンネルが作られ、準備について少し話し合われた。主にはパスポートの取得と、昨年のコンテスト環境について。そういえばYandex Cup 2023の参加記をまだ書いていない。せっかくなので書きたいが……。

朝までなろう版の「恋愛魔法学院」を読んでいた。とりあえず書籍化された部分まで読み終えたが、2巻はかなり加筆があったらしい。武術大会が存在しなくて驚いた。また周囲のキャラも結構印象が違い、特にエリクが腹黒でより得体の知れない感じになっていたように思う。

https://ncode.syosetu.com/n2840hw/

午前7時就寝。

週記(2024/10/21-2024/10/27)

10/21(月)

午前6時起床。シャワーを浴びて洗濯を済ませ、朝からインターンで稼働した。ここ2か月くらい立ちはだかっていた問題に対し、ついに対症療法を確立。動けばよかろうという感じではあるが、これ以上だとちょっとわからないことが多すぎる。

ただその代償として、手元で試行錯誤しているとき急にUbuntuが落ちて、数値計算を走らせていたJupyter Notebookが消えてしまった。途中経過はある程度ファイルに保存してあったものの、何も考えず適当にダンプしただけなので再利用しにくい。今回は頑張って読み込むとして、次回以降で要改善。

……と考えていたのに、topコマンドで確認するとPythonだけまだ走り続けていた。謎。出力ファイルの更新も徐々に行われているので、このまま待ち続ければ所望の結果も得られるということになる。まあNotebookがないと進捗の確認ができないので、結局再起動した。ファイルの記録も利用できて、無事止めたところから再開できた。

しばらく週記を書いて、午後1時過ぎに大学生協へ。学食で食事した後、明日使う新幹線の切符を買った。ラノベも買って帰宅。

午後3時半からはインターン先定例会。進捗報告では今朝の話をした。対症療法を適用してから5時間ほど経つが、幸いにして変な挙動の報告はない。もう大丈夫だろう。

勉強会はAHC038について。自分はこのコンテスト、実装があまりに大変そうで何も実装せず挫折してしまったのだが、シミュレータのコードを流用すればよいと聞いて目から鱗だった。操作を出力できる形式でのみ取り扱い内部をブラックボックス化すれば簡単に流用でき、またマラソンではそれで十分なことも多い。

週記を書き進めて日付が変わる前に投稿した。コンテストの詳細が微妙に間に合っていない。

午前1時くらいに布団に倒れこんで寝た。

10/22(火)

午前10時半起床。昨日再起動した数値計算が終わりかけていたので、最後まで見守った。落ちる前も合わせて計34時間弱かかったらしい。前回のものと入力のサイズ的にはほとんど変わっていないのだが、ほんの少しの違いが計算量にはたぶん3乗くらいのオーダーで効いていて、ここまで違いが出たのだと思う。

PCを確認すると全体の計算に成功していた。7時間かかったようだ

週記(2024/08/26-2024/09/01) - kotatsugameの日記

さて、昨日買った新幹線の切符を使い、今日から帰省する。シャワーを浴びてゴミを出し、午後1時くらいに家を出た。

最近仙台では非常に寒い夜があったためもう冬だと認識しており、最初はパーカーの上に防寒着を羽織って行こうとした。直前で現在の気温を確認し、さすがにパーカーを取りやめたのだが、取りやめるのは逆であるべきだった。防寒着を着ている時点でめちゃくちゃ暑い。まだ全然冬ではなかった。

汗まみれになりつつ仙台駅前に到着。丸亀製麺で食事しようとしたがすごい行列だったため、諦めて新幹線の時間までゲーセンで過ごした。軍手を持ってきていないため素手で、5クレプレイ。手が滑らなくてスライドを押さえるのすらおぼつかなく、また速いタップスライドが抜けまくって辛かった。

駅のコンビニで弁当を買い、新幹線に乗り込んだ。今日は大宮以前・以後どちらもかなり混んでいた。隣席に人がいる中小さくなりながら弁当を手早く片付け、大宮まではハーメルンを読み、それ以降はずっと寝ていた。

父に迎えに来てもらって帰宅。午後7時過ぎに夕食を摂ったあと3時間ほど居間で爆睡していた。入浴して布団に移動。

Yandex Cup Semifinalの日程が出たらしい。情報が錯綜しているが、公式のTelegramを翻訳すると11/03の17時から19時(UTC+3)になっていた。つまり、AGC069と被っている。どうするのだろう。

しばらくハーメルンを読んで午前2時半ごろ寝落ち。

10/23(水)

午前6時過ぎに目を覚ました。耳元で虫の飛ぶ音がして二度寝できず、1時間ほど悶えたあと諦めて起きて、朝食を摂った。

今日は免許の更新をする。これが今回の帰省の目的だった。無事故無違反のまま2回目の更新なので講習は優良運転者向けとなり、たった30分で完了。最近の道路交通法の改正点としてあおり運転厳罰化はホットトピックであり、前回講習と同じ話を聞くことになったが、厳罰化のきっかけの話は何度聞いても辛い。

初回の更新ということで、2時間コースの講習を受ける。

週記(2021/10/18-2021/10/24) - kotatsugameの日記

タイミングよく選挙が行われていたので期日前投票もした。昼前に帰宅。富山県、信じられないくらい暑い。今日は30度を超える真夏日らしい。昨日パーカーやら防寒着やら寝ぼけたことを言っていたが、長袖Tシャツ1枚で全く問題なかった。

母が昼食を用意してくれている間にうっかり寝てしまい、起きたら午後3時だった。食事してまた2時間ほど睡眠。その後、少しだけ公文式の教室に顔を出した。春に話した高校生が今日もいて、自分のことを覚えておりびっくりした。

少しだけ公文式の教室に顔を出した。今日はこの時間になっても生徒が多く残っていて、まだ忙しかった先生とはあまり話ができなかった。すぐ帰るのも寂しかったのでその場にいた高校一年生と話をしたのだが、せっかく質問してもらっても高校時代の勉強の話を何一つ覚えておらず、まともな返答ができなかった。ただ邪魔しただけになってしまい申し訳なさを感じる。

週記(2024/04/22-2024/04/28) - kotatsugameの日記

帰宅して三度、睡眠。午後8時過ぎに起きて夕食を摂った。今日のメニューは自分が頼んだアジの塩焼き。そこに何品も副菜が追加されており、昼食から5時間しか経過していない身にはかなり苦しかったが、なんだかんだ食べきることができた。

自室の衣類の片付けをした。高校時代に来ていた服を残していたが、もうさすがに着ないだろうということで大胆に捨てた。一方競プロのコンテストTシャツもかなりの量が溜まってきている。こちらこそ絶対に着ないものの、とはいえ記念なので一切捨てはしなかった。数えたら、スポンサーセッションで貰ったものを含め42着あった。

午後11時ごろ入浴し、洗濯しながら日記を書いていた。昨日Yandex Cup SemifinalとAGCが被っていることが判明したが、いつの間にかAGCが11/10にずれていた。これは短期AHCと同日である。

午前1時就寝。

10/24(木)

午前6時半起床。朝食を摂ってから集中講義の課題レポートの清書をした。火曜日に課題の提出先が用意され、締め切りが11/15であると判明。まだ頭がぼんやりしているので、提出は再度見直しをしてからにしたい。

後から清書する予定。ちなみにClassroomにはまだ課題の提出先が用意されていない

週記(2024/10/14-2024/10/20) - kotatsugameの日記

布団に戻ってしばらくハーメルンを読み、正午から3時間ほど二度寝。昼食を摂ったのちさらに三度寝に入った。

午後5時半ごろ起床。AGCの日程がさらにずれて11/24となっていた。公式でアナウンスも出たため、これで確定と考えてよいだろう。

午後6時から幼馴染と飲み。夏の反省を活かし帰省の日程が固まった段階で連絡を取ったら、この日の夜なら空いているという返事があった。待ち合わせに仕事帰りすぐの格好で来てくれて、直前まで寝ていた身として少し申し訳なくなった。

仕事を終えた幼馴染が久しぶりに訪ねてきてくれた。なんと話すのは成人式の日以来らしい。なんとなく気が引けて連絡も取っていなかったが、そんなことで昔からの親友を失うのはもったいないし、向こうもまだ自分のことを友達だと思ってくれているし、これからは帰省するときにLINEで一報入れるくらいはしようと考えた。

週記(2024/08/05-2024/08/11) - kotatsugameの日記

店は中華料理屋。近況、ボドゲTCG、就職の話をした。自分は働くことについて何にも考えていないので、職業選択の心得を聞いてもピンとこなかったが、確か「やりがい」について話してくれたはず。転職の多いITエンジニアという特殊な職業でも、もしかしたら重要なポイントになるのかもしれない。

食後、近くを散歩しながらもう少し喋った。ここでは本の話をした。幼馴染は最近「三体」を読破したらしい。また、人生を変えた一冊を選ぶとしたら何かという話題も扱った。自分は森見登美彦「きつねのはなし」で、記憶している限り初めて読んだ小説だから。幼馴染ははやみねかおる「都会のトム&ソーヤ」を挙げた。自分も小学生のころ彼から借りて読んだが、非常にワクワクしたことを覚えている。

午後9時過ぎ帰宅。またしばらく寝て、CFが始まる直前に起きた。午後11時半からCF #981 div.3。

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

Aはnの偶奇が問題で、何も考えずサンプルに合わせればよい。Bは極大な対角線のみを使うべき。Cは両端を同時に見ていくdp。DはZero-Sum Rangesをちょっと弄ったdp。Eはサイクルの長さがすべて2以下になればよく、そうでないサイクルに対しては1回の操作で長さを2減らせる。

Fはn\mid m\Leftrightarrow f(n)\mid f(m)という関係を思い出し、初めてkで割り切れるインデックスを探してそのn倍を出力してみたら通った。実験で10k以下の範囲ならこれで正しいことは確認できていたが、それ以降は知らない。

Gは頂点をk個まで遡り、部分木の最遠点を求めたい。ただし元の頂点が属する部分木は除かなければならない。これがHLDで解けるのは有名な話で、heavy edgeは「元の頂点が属する部分木」が判明しているため前計算した結果をセグ木に乗せておくことができ、light edgeだけ個別に確認すればよい。ただあんまりライブラリを窃盗できるような形ではないため、その場でフルスクラッチした。

1時間で全完して12位。

日記を書き、入浴して、午前3時就寝。

10/25(金)

午前6時ごろ目を覚ましたが、今日は仙台に帰ってそのまま夜のコンテストに出るため、朝食より二度寝を優先した。

午前11時起床。昼食後にケーキを食べた。

母の車で新幹線駅まで送ってもらった。車中で米津玄師の新アルバム「LOST CORNER」を聞いた。「KICK BACK」はMVの印象が先行していたが、トラックで跳ねられた箇所は音だけでも強烈。しかしこの音、例えば以下の動画では使われていないから、改めて聞くと新鮮な感じがした。

www.nicovideo.jp

新幹線は今日もほぼ満員。大宮まではpreprintの加筆、大宮からはハーメルンを読んでいた。午後5時前に仙台に到着した。

帰る前にゲーセンで7クレプレイ。今日はなんだか鍵盤が上手く、14+を伸ばすことができたが、それでもやはり素手でプレイしたことによる失点がいくらかあった。残念。

ラーメンを食べて帰宅。シャワーを浴びて午後9時20分からyukicoder 451に出た。TROCと被っているので45分だけの参加となる。

yukicoder contest 451 (並木中等プログラミングコンテスト 2024) - yukicoder

A、Bはよい。Cは問題文がよく読めなかったのでサンプルからエスパーした。解が存在しない場合どうするのか迷ったが、問題文を振り返ってみると存在が保証されていて仰天。Dは適当にbitDP。EはLCAごとに足し上げる木dp。Fはlを降順に見ながら累積MAX・累積MINをstackと区間代入区間和取得の遅延セグ木で管理し、積の和を差分更新していった。

Gは値vを降順に見て、列に含まれないv以上で最小の整数と列のうちv以上の要素が何個あるかを状態に持つdpをすれば解けると思った。しかし書いてみると状態が3乗なのに遷移にO(N)かかり間に合わない。時間もないので適当に畳み込みにしてO(N\max(M,K)^2\log N)を投げたらギリギリ通った。

ここで午後10時5分となり時間切れ、かと思ったらTROCが15分こどふぉったので、ロスタイムでHに取り組んだ。シンプルなO(NM)解が得られたので通らないかと投げてみたものの、当然TLE。それ以上は特に何もできず、午後10時20分からTROC #39に移った。

https://tlx.toki.id/contests/troc-39

書く

11月の新刊チェックを行い、28冊注文した。1巻から長く空いて続刊を絶望視していた「非科学的な犯罪事件を解決するために必要なものは何ですか?」と「FPSゲームのコーチを引き受けたら依頼主が人気VTuberの美少女だった」の2巻が出るらしく、嬉しい。

www.kadokawa.co.jp

www.shufu.co.jp

午前5時就寝。

10/26(土)

午前10時半起床。ハーメルンを読んでいたら午後2時、Universal Cupの時間になってしまった。今日は14回目のHarbinセット。

https://qoj.ac/contest/1817

書く

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

TOYOTA SYSTEMS Programming Contest 2024(AtCoder Beginner Contest 377) - AtCoder

Aはソートして判定。Bは愚直。Cは置けないマスをsetで管理。Dはlを降順に見てrの条件を徐々に追加していく。Eはサイクルグラフで2^K個先に進めばよい。

Fはひたすら面倒。置かれているコマが取れるすべての直線を列挙したのち、直線二つの組について高々一つの交点をすべて求めた。この重複度を見ることでそのマスが何本の直線に乗っているか区別できる。

GはTrie木を使うと終わり。木曜日のCF-Gとは異なり求めるのが最も近い点であるため、自分自身を含む部分木を無視する必要がない。

35分で全完して6位。AとBをNibblesで縮めておいた。Bは行とtransposeした行つまり列のペアを全列挙し、連結して"#"から引くと、集合の引き算により数えたいペアのみ空でない列が得られて、うまく真偽を分けられる。

www.youtube.com

素早く全完したので、振り返りして動画投稿するまでを次のCFが始まる前に完了できた。午後11時半からCF #982 div.2。

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

書く

www.youtube.com

あまりにお腹が空いたので、コンビニに走って菓子パンを大量に買ってきた。いくつか食べてTLを眺めていたところ、急激な眠気に襲われて布団に倒れこむ。午前6時就寝。

10/27(日)

午後1時半から2時間ほどは起きてハーメルンを読んでいた。二度寝して午後8時起床。シャワーと食事を済ませて午後9時からARC186に参加した。

AtCoder Regular Contest 186 - AtCoder

まず全問読んで、とっつきやすそうなBから取り組んだ。区間[A_i,i]が中途半端に交差することはないため、iの親をA_iとして木を作ると部分木ごとに独立に考えられる。その大小関係も根と直接の子によってのみ決定できるので数え上げは簡単。順調に通った。しかし順位表を見るとみんなもっと速くB問題を通しており、83位で絶望。

以降はsolved数順。2問目としてAに取り組んだ。例えば[1,0;0,1][0,1;1,0]は似ている。実は本質的にこれしかないんじゃないかと考えた。もう少し一般化すると、h,w\ge 2に対してh\times wの長方形領域以外をすべて固定することができる。

さすがにそれだと自明すぎるのでN=5で全探索してみたところ、固定されている成分を12個にできることが発覚した。つまり長方形領域で13個の成分を覆わなければならず、一つの領域では不可能。実際に構成例を出力してみて、複数の長方形領域を対角線上に並べてもvalidであることに気づいた。これでAC。計算量はbitset dpによるO(N^6/\mathrm{wordsize})だった。この時点では50位。

C問題に進んだ。箱が十分あれば、最終的な状態はM-1個の箱にボールが1個だけ入り、それ以外の箱は満タンか、そもそも買っていないか、という状態になるはず。満タンにした時は利益V-P、ボールが1個だけだと利益1-Pのため、球橋さんはこの差分V-1が大きいものを優先的に残したい。そして、これまで買われた箱のうちどのM-1個を残すかは常に球橋さんが決めることができる。

よって箱をVの降順に並べ、ある仕切りを境にVが大きいほうでは1-Pが大きいものM-1個、Vが小さいほうでは\max(V-P,0)の総和を求めると、これが箱木さんの利益の候補となる。あとは仕切りを全探索すればよい。

ここまでたどり着くのに2ペナ支払っていたが、さらに実装ミスで仕切りが左端にあるケースを考慮できておらず、M=1のケースで落ち続けてしまった。この修正にさらに2ペナ+15分かかり、ACした時点で53位。もう一問解かなければ決勝に進出できないのに、時間が16分しか残っていない。

とにかくD問題に取り組んだ。Polish数列の判定は後ろから1-Vの累積和を取れば簡単に行えること、これを用いてprefixがAと一致しsuffixをdpで数える方針が立つこと、さらにdpの遷移がランダムウォークになっており値をcombinationで書けそうなことまでは考察が進んだが、詰める時間がまったくもって足りなかった。

3完72位。惨敗。

コンテスト後からCGRまでの30分とCGR後の1時間半を使ってD問題をupsolveした。ようやくTLEを解消したと思ったら今度は大きめのケースでWAが出るなど、かなり苦労した。最後に残ったミスは1-Aの和がオーバーフローしていたこと。この辺りをもうちょっと真剣に考えていたら、dpの区間和をWolfram|Alphaで閉じた式にしなくても、解説で言われているようにそもそもO(N)点しか見ないことに気づけたのだろうか。

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

Dashboard - Codeforces Global Round 27 - Codeforces

書く

www.youtube.com

今日も動画を撮っていたが、コンテスト本体の2時間+3時間に加えARC-Dのupsolveに2時間、ARCの振り返りに1時間、CGRの振り返りに2時間かけており、録画を終えると午前7時になっていた。

動画をアップロード・公開したあと日記を書き、午前11時くらいに布団に入った。しばらくハーメルンを読んで午後0時半就寝。

週記(2024/10/14-2024/10/20)

10/14(月)

午後5時起床。今日は祝日だが大学の講義は休みにならなかったようで、大学生協も変わらず営業している。学食で食事して購買でラノベを受け取り、帰りにコンビニに寄ってきた。

先週の週記を書き進めて午後11時過ぎに投稿。またしてもスカスカである。先週・先々週は読んだハーメルンの感想すら埋まっていなくて大変。「よう実」の二次創作ばかり読んでいたので、どの話がどんな展開だったか頭の中で混ざってしまった。

午後11時半からECR170。

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

Aはコピーは高々1回。stのLCPを求める。LCPの長さが0のケースではコピーする必要がないことに注意。Bは表を書くと2^kだとわかる。k=nのケースがないのはかなり優しい。Cはソートして尺取り。

Dは片方の現在のレベルを持つdp。ポイント獲得時はO(m)かけて更新してよい。それ以外は区間インクリメントになるので、imos法で処理する。ポイント獲得の度にまとめて反映しても変わらずO(m)で処理できる。

Eはスートごとに、先手がカードを何枚持つかを状態としてdpする。後手に勝つような出し方があるかは、カードをランクの昇順に見ればチェックできる。O(m^2)でdpした後、スート2\dots nの分としてn-1個畳み込むと、後手が何枚余らせるかわかるので、そのO(m)通りそれぞれについてスート1に関するdpを行う。合計O((n+m)m^2)

Fは\pm 1を後から決めてよく、このときインデックスごとに+1-1を交互に行うのが最適だから、各インデックスをできるだけ偶数回操作するのが目標となる。これは辺(x,y)を集めて作ったグラフにおいてEven Degreesをすればよい。

B - Even Degrees

Gはa+bラウンドで1ダメージ食らうと解釈するのが良い。これをヒーローhと防具dそれぞれの寄与に分解すれば、ペア(h,d)に対してラウンド数がh+\min(h,d)だけ伸びると分かる。最大化するためにはhdを降順に並べてマッチングしていくのが良い。しかしこれでもまだ計算は難しい。

ここで、h+dから損する分d-\min(h,d)を考えてみる。この値を数直線において区間[\min(h,d),d)に対応させ、幅1の区間c_i=[i,i+1)にバラすと、実は次のようにして計算できる:すべての防具について[0,d)+1、すべてのヒーローについて[0,h)-1したとき、\max(c_i,0)の総和。これは平方分割で計算できる。

Gのoff-by-oneで配列外参照を起こし、3回ほど37ケース目で落ちることを繰り返したが、ギリギリ時間内に気づいて修正できた。全完6位。

www.youtube.com

ハーメルン「『パワプロ成長』でダイヤのA」を読了。面白かった。投手全振りだと思っていたらいつの間にか打撃も最強格になっていて爽快。原作のことは全く知らないが、特に問題なかった。

同じ作者の「二郎になりました…真君って何?」も読んだことがある。どちらも300話前後あるが、1話あたりの文字数が少ないので総文章量はそれほどでもない。話の内容・展開が結構あっさりしていて、重たいシーンや重要な見せ場などをさっさと通り過ぎていくのも共通。ある種の読みやすさではあると思う。

syosetu.org

午前8時就寝。

10/15(火)

午後4時過ぎに目を覚ましたら、JOI一次予選の第2回が公開されていた。気づくのが遅すぎてShortestもFastestも取りつくされていたが、Bだけ1B更新することに成功した。Nibbles。

JOI 2024/2025 一次予選 (第2回) 過去問 - AtCoder

布団に戻って2時間ほど二度寝したあとは、R18のハーメルンを読み漁っていた。四つばかり読了。

「無口無表情でダウナー系の幼馴染は僕の部屋でくつろぎすぎている──ダウナー系で隠れ巨乳美少女な幼馴染がオナニーしているところを見かけてしまってから、僕が彼女と生ハメセックスを繰り返す仲になるまでの七日間」。良かった。タイトルからして短くまとまりそうなのも嬉しい。もう少しで完結するのではないか。

syosetu.org

「一色開発日記」。設定・シチュエーションに興味を掻き立てられたが、ほとんど進展なくエタりかけているのが残念。

syosetu.org

「俗物な転生者が天竜人になるようです」。ワンピースの通常の二次創作として面白かった。ところで、そもそも自分はワンピースの原作キャラをそういう対象にするのが苦手な気がする。頭の中にあるデフォルメされた原作イラストとR18の相性が悪い。

syosetu.org

「多分子供向けTCG世界か何かに転生したっぽいが、俺だけ成人誌の世界なんだが?」。エロではなくグロのR18。まあそんなにグロくはなかった。3話でエタりかけているが、TCG世界の最強キャラとして非常に良い雰囲気が伝わってきた。

syosetu.org

午後10時過ぎに寝落ち。

10/16(水)

午前2時半起床。

昨日に引き続いて、R18ハーメルン「最強雌殺しチンポ持ちのマスター君がサーヴァント達をハメ潰しまくる短編集」を読了。1話1話が長い。またFateにおけるキャラのビジュアルを詳しく知らないのだが、かといって一次創作のように自分で自由に想像するのも違うだろうから、頭の中でどのようにイメージすべきかが難しい。

syosetu.org

今週末のUniversal CupはTUPC2023セットである。準備が大詰めを迎えており、自分も英語問題文のチェックで参加した。やはり読むのと書くのは大違い。競プロの英語問題文なんてこれまで大量に読んできたはずなのに、典型フレーズをちっとも覚えておらず、文章に違和感があっても修正案をうまく出せなかった。

午前5時くらいからセミナー準備を始めた。セミナー準備というか、前回資料の英訳。これも修論とは別のpreprintになる予定である。

午後1時過ぎに学食に行った。今日の麺メニューは「濃厚魚介つけ麺」。以前からある「黒胡椒つけ麺」はつけダレの粘度が低いが、こちらは濃厚の名に恥じぬとろみがついていた。粘度が高いほうが好みな自分としては非常にありがたいところである。

ラノベを買って帰宅。セミナー準備を続けようとしたが眠気に負け、3時間ほど仮眠をとった。起きてから再開し午後9時くらいに完了。セミナー参加者にメールを送信した。

ハーメルンを読んで、日付が変わるくらいに寝落ち。

10/17(木)

午前3時過ぎ起床。

ハーメルン「俺がカードゲームで無双できる都合のいい世界 〜カードゲームアニメの世界に転移したけど、前の世界のカード持ち込めたので好き放題します〜」を読了。面白かったが周囲のレベルからあまり逸脱しないように力をセーブしているのはちょっと残念だった。一家揃って転移してきたから、家族のことを考えると悪目立ちもできないのだろうと理解はする。

この作品オリジナルのTCGは、詳細なルール説明はなかったが、読んでいるとだんだんわかってくる。基本的には遊戯王っぽくモンスターの召喚・魔法の発動にコストが必要ない。さらに簡単にするためか、召喚権がターン1ではなく、さらに魔法の発動を任意のタイミングで(相手ターンでも!)手札から直接行えるようになっている。その分、モンスターゾーンは3体分しかない。

syosetu.org

セミナーについて、昨日はほぼずっと資料の英訳をしていたため、今日新たに話す内容がほとんどない。そこで追加の準備を試みた。数値計算によってある条件を満たすグラフのリストが手に入っているのだが、そのリスト全体で何か共通する性質がないかを探してみた。

これまでは一つのグラフに注目してできることをずっと詰めていたから、全体を見渡すのはやったことがなかった。さらに言えば、そのような性質は簡単には見出せないだろうと思っていた。ところが、試しに部分グラフの関係を見てみたところ、なんとリストのうちある一つのグラフが他のすべてのグラフを含んでいることが判明。ここから何がわかるかまだ不明とはいえ、かなり顕著な性質であった。

午前9時ぐらいから3時間半二度寝して、原付で登校。悠長に学食で食事する時間がなかったため購買でパンを買って食べ、教室に向かった。

午後1時半からセミナー。今朝の内容を話したがふーんという反応だった。自分でも今のところふーんとしか言えないので、まあそれはそう。あとはpreprintに何を書くべきかと、数値計算で得られたデータをどのように工夫して見やすく表示すべきかという点について助言をもらった。

2時間で終了。しかしそこで解散ではなく、それから後輩の発表を少し聞いたり、先生が担当するセミナー形式の講義に参加したりした。講義には10月から先生の下に来ている留学生も参加しており、挨拶した。去年と同じ半年だけの留学プログラムで、今年は後輩が留学生のチューターを担当している。

学食で食事して午後7時から麻雀を打った。2半荘でどちらも2着。上がった回数は少なかったが、高い手が多かった。日付が変わる前に帰宅。

家に帰ってからもフラッシュゲームで麻雀を打っていた。ツモれば四暗刻の手が舞い込んだのに先に上がられて残念、と思ってふと相手の手を見たら国士無双だった。これに負けるなら納得感がある。

シャワーを浴びて、午前4時前からYandex Cup 2024のQualificationを走った。参加できる期間が週記公開前に終わるので、ここに感想を書く。

https://contest.yandex.com/contest/69390

Aは算数で判定して二分探索。Bは左右から前計算しておく。Cは全部Lまたは全部Rに置換するのが最適。Dは上限を倍々で探索した後二分探索。そういえば去年のQualの最終問題は、Stern-Brocot treeの探索にこのテクを使うことで\logが一つ落ちるという話だった。運営はこれが好きなのか?Eは適当にdpしたら\lfloor n/2^i\rfloor-200から\lfloor n/2^i\rfloorしか出てこないという、正直親の顔より見たやつ。

まず二分探索の上限を指数探索で調べれば判定回数が全体でlog log 回になるらしい。自分の実装はおそらくここがlog log 二つになっていて落ちたのではないか。

週記(2023/10/23-2023/10/29) - kotatsugameの日記

Fは問題文に最適なクエリ回数が書いてあってありがたい。15クエリの最適な聞き方があって、それへの正しい返答を15bitの数だと思うと、1bitまでflipされて返ってくる。つまり答え一つに対して返答が1+15個存在するから、識別できる最大値は2^{15}/16=2048。よって0から2024を区別するにはほぼ理論上の最大値を達成する必要がある。

しかし非常にあっけなく見つかった。結論だけ言うと、15bitの数を小さいほうから探索して、1bitまでflipした数16個がすべて未使用だったら採用して16個を使用済みにするという方法で、互いに識別可能な2048個の数が見つかる。あとは正しい返答がこれになるようにクエリを定めればよい。

何も悪いことをしていないのにジャッジから-1が返ってくることがあるらしく、1REに加えてバグ探しで14分ロス。結局バグはなく、1ペナ支払ってREではなくWAになることを確かめようとしたら通ってさすがにひっくり返った。確かに、問題文を正確に解釈しようとすれば、ジャッジの気分次第で答えが返ってこないことがあると読めなくもない。マジで言ってる?

少し日記を書いた後、数値計算に取り組んだ。今日のセミナーで、求めたグラフのリストに平面グラフはなかったのかと聞かれたため、チェックしてみた。見つかった。まあ平面性が関係しそうな話は今のところ一切ないので、やっぱり部分グラフの話と同じく現状ではただ見つかったというだけ。

午前9時就寝。

10/18(金)

午後6時から2時間ほどの中途覚醒を挟みつつ、午後11時起床。そこから少しハーメルンを読んだら午前2時。起き上がって食事した。

朝まで数値計算と格闘していた。また一つのグラフに注目する作業。以前対象に選んだグラフについては決着がついたのだが、もう一つくらい例があっても良いかもと言われた。せっかくなので昨日発見した平面グラフを使うことにした。

しかしこれが全然うまくいかなかった。手法をあまり確立できておらず、以前もガチャを回したのだが、今回はそれ以前の段階で躓いている。延々試行錯誤していた。全探索のようなことも何度か行っており、小刻みに待ち時間が発生して、気を抜くとすぐダラダラしてしまう。

どうやら「当たり」のパラメータを引き当てたようだ。

週記(2024/08/26-2024/09/01) - kotatsugameの日記

その待ち時間で先週の集中講義の課題レポートに取り組んだ。講義資料にいくつか用意されたExerciseのうち二つ三つ解くという形式。せっかく先生にいろいろ質問しに行ったのだから、それなりに難しいものを選ぼうと思ったのだが、最初に選んだものがどれもポンポン解けてしまった。

とはいえ残っている問題のうち難しそうなものには手が出ないので、諦めて解けたものを書くことにした。今はとりあえずアイディアをメモしておくだけにして、後から清書する予定。ちなみにClassroomにはまだ課題の提出先が用意されていないため、締め切りがいつになるのかは不明である。

午前10時くらいになって寝ようとしたが、せっかくなので学食が開くまで待ち、生協でいくつか用事を済ませることにした。こちらの待ち時間ではラノベを読んでいた。

午前11時半に出発。すっかり秋だと思って長袖の上からパーカーを着たが、なんと今日は夏日らしい。非常に暑かった。食事してラノベを買い、散髪して帰宅。

シャワーを浴びて午後2時前に寝た。

10/19(土)

午後7時起床。昨日読んでいたラノベ「バスタード・ソードマン」4巻を読み切った。

このシリーズは主人公のしょうもない日常が良いという話を以前にした。しかし3巻ラストの衝撃を受け、それでは物足りなくなってしまった。4巻も戦争の気配が漂ってきて何かありそうではあるのだが、まだ何も起こってはいない。そもそも戦争が始まったとして、それに主人公が関りを持つともあんまり思えない。先行き不透明。

食事して午後9時からABC376に出た。

AtCoder Beginner Contest 376 - AtCoder

Aはよい。Bは算数をしたくなかったので愚直に数えた。Cは二分探索。Dは1\rightarrow uの最短経路と辺u\rightarrow 1に分解する。Eは\max Aを固定、正確には値Mであって\max A\le Mとなるものを固定すればよい。

Fはdpで、直前の操作によって状態数がO(N)通りになる。また遷移は手を時計回りに動かすか反時計回りに動かすかのみ。操作回数は頑張って算数するしかない。まあBを読んだ時点で、これは回避不可能だとわかっていた。場合分けとコピペが大量発生してかなり怪しかったがサンプルは一発で合い、幸いそのままACできた。

Gは何もわからず。頂点を探索する順番を長さNの順列Pとしたとき、すべてのiについてP_{p_i}\lt P_iであることが条件であり、また期待値は分母を除いて\sum a_i P_iになる。このPを探す問題。どうせ貪欲だろうと思ったが、自分が思いつく範囲では何をキーにしてもうまくいかなかった。

6完23位。コードゴルフはAのみ、Nibblesで書いた。scanl1を使って「直前に飴をもらった時刻」の列を作成し、重複を除いた長さを求める方針。

午後11時から、普段より30分早くCF #979 div.2。

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

Aは、b_2以降はすべて\min ac_2以降はすべて\max aとできる。b_1=c_1なのでこれが最大。Bはf(s)=2^{n-1}-1とするべきであり、sを1文字だけ1にすることで達成できる。

Cは端に1があれば先手勝ち、途中に11があってもその間にANDを入れることで先ほどと同じ議論が回り先手勝ち。逆にそれ以外のケースは後手勝ちである。

DはLRで区切ってみると各成分の内部では自由に交換可能で、成分が異なると交換不可能である。pを見ると成分の区切りになってはいけない箇所が列挙できて、ダメな区切りがいくつあるか差分更新できるようになる。

書く

午前2時からはMHC Round 2に出た。

Meta Hacker Cup - 2024 - Round 2

書く

MHCはファイル提出のため余計なものが映り込む可能性が高く録画したくなかったのだが、ABCとCFの振り返りが間に合わなかったので、録画を中断してMHC後に30分ほど追加で録った。二つの録画ファイルを繋げて計5時間半の動画をエンコードするのに3時間くらいかかり、午前9時を回ってようやく公開できた。

www.youtube.com

今日も数値計算に取り組んだ。平面グラフはいくつかあるので、昨日のように一つのグラフに対して適用できる方法を探し求めるのではなく、一つの方法について適用できるグラフを探し求める方針にしてみた。するとめでたく発見。

実のところ、計算がうまくいきそうというだけで、本当に成功するかはもっと長い間待たなければわからないのだが、ともかく長い時間CPUをぶん回すフェーズに入ることができた。前回は7時間かかった計算を、今回はもう少し大きな入力に対して行う。果たしてどれだけの時間がかかるだろうか。

午後0時半就寝。

10/20(日)

午後5時半起床。午後6時からCF #980 div.1に出た。同時開催のdiv.2は、ついに到来したIDが2024のコンテストである。

Dashboard - Codeforces Round 980 (Div. 1) - Codeforces

書く

www.youtube.com

動画投稿を終えて午後9時半。それからゲーセンに向かい、閉店までで8クレプレイした。14+の「Trackless wilderness」と「Megameteor」のAJを出すなど成果は上々。この2譜面はもともとのスコアが低かったので、オーバーパワー的にも嬉しい。

ラーメンを食べて日付が変わってから帰宅。

数値計算が思ったより遅い。今回している入力に対してかなり効きそうな高速化ポイントがあったため、改善したものも同時に走らせることにした。

様子を見守っているうち椅子の上で意識を飛ばしそうになったので、慌てて布団に移動。午前2時過ぎに寝落ちした。

週記(2024/10/07-2024/10/13)

10/07(月)

午後2時前起床。今週は集中講義の週であり、月曜日の談話会は午後4時から始まるため時間に余裕がある。ゆっくり準備し、天気が悪いので地下鉄で登校した。購買で買ったパンを食べて川井ホールへ。

前半、眠気に負けてうつらうつらしていたら重要な定義を聞き逃したようで、談話会の主題っぽい部分が全然わからなかった。失敗。聞き取れた範囲では「連続論理」という、真偽値を0以上1以下の実数に拡張したものが面白かった。特に0に近いほうを真とすることで、論理式における等号の代わりに距離関数が使えるようだ。このとき量化記号\forall x\exists xはそれぞれ\sup_x\inf_xになる。

学食で夕食を摂った後、4人集めて麻雀。みんな忙しいようだし自分も先週の週記が全然書けていなかったので、東風戦1回だけとなった。ただし連荘が続いたため3時間ほどかかった。着順は2着だがトップの一人勝ちで、和了は1回だけ、持ち点は25000点を下回った。

一向聴くらいまでは安定して手が進むようになったと思う。最終局は4巡目くらいに聴牌して、そこから打点を高めてみようと手を崩しタンヤオを狙った。結果、残念ながら上がれなかったものの、一盃口もつけてリーチをかけるところまでは行けた。後から確認したらなんと雀頭が裏ドラだったので、5翻満貫の手になっていたらしい。まあこれを直撃させてもトップはまくれなかったのだが、打点を狙いに行って成功しかけたのはドキドキした。

午後10時前に帰宅。先週の週記は穴あきだらけのまま、体裁だけ整えて投稿した。日付が変わってからは延々ハーメルンを読み続け、午前7時くらいに寝落ち。

10/08(火)

正午起床。2時間ほどハーメルンを読んでから登校した。地下鉄を使ったのも購買でパンを買って食べたのも昨日と一緒。

午後3時から集中講義「モデル理論入門」。完全性定理については既習であることを想定すると言われ、すべてを忘却していた自分は震え上がったが、講義資料がかなり丁寧で事前知識もある程度カバーしてくれた。ただわからなかった点を先生に質問しに行ったら講義内容以前の基礎的な事項だったので、やっぱりダメかもしれない。今週は学部生のふりをしようかな……。

自分の質問とは別の話。モデルMNについて、任意の論理式\varphiに対しM\models\varphiN\models\varphiが同値となることを示すには、\Rightarrow\Leftarrowの片方だけ確認すればよいらしい。なぜなら\Leftarrowの対偶は(M\models\lnot\varphi)\Rightarrow(N\models\lnot\varphi)となり、\lnot\varphiもまた論理式であるから。暗黙的に使われまくっていたので、典型テクニックなのだろう。

学食で食事してから、今日も麻雀。3.5半荘打って3着、1着、4着(トビ)、1着だった。最後の0.5半荘については自分が抜けた後を別の人が引き継いで南場に突入したらしく、最終的な順位がどうなったかは知らない。今日はなぜか起家にドラの絡んだ高い手が出やすく、5万点から6万点くらい集め最下位を飛ばして終わるのが3回繰り返された。南入しない回もあったため普段より多くの半荘をこなすことができた。

終電の1本前で帰宅。ハーメルンを読んだ。最近夢中になっていた「ようこそ未熟者がいく教室へ」を読了。

書く

syosetu.org

コンテスト後に行っている振り返りについて、ホワイトボード単体で共有してほしいというコメントがYouTubeに来ていたので、画像としてエクスポートしてDropboxに上げておいた。例えば勉強会のスライドはGoogleドライブに上げているが、メールアドレスがバレるのが気になる。YouTubeからワンクリックでたどり着けてしまうのは違うよな、ということでDropboxを使うことにした。

Dropbox - コンテストの振り返り - Simplify your life

午前4時過ぎ就寝。

10/09(水)

午前11時に目を覚ましハーメルンを読み始めてしまったが、1時間半で二度寝に成功した。午後2時起床。今日は天気が良いため原付で登校した。つい先日まで半袖Tシャツで原付に乗っていたはずなのに、今日は長袖の上からパーカーを羽織ってもなお寒かった。防寒具を出す必要があるらしい。

購買でパンを買い、院生室で少し話した。昨日の麻雀は自分が抜けた後、南場を終えてすぐ解散となったらしい。結局その半荘も起家が1着になったと聞いた。起家は持ち回りで務めたため、全員1回ずつ1着をとったことになる。

午後3時から集中講義二日目。昨日質問したことについて、資料に補足説明が追加されており、講義中でも少し触れられた。これに関して自分の理解を少しメモしておこう。

昨日の講義ではこのような説明があった:単位元、逆元、積の演算をfixした群の列G_0\subset G_1\subset\cdotsについて、\bigcup_n G_nもまた群となる。一方、比較演算のみをfixした「最小元を持つ」全順序集合の列M_0\subset M_1\subset\cdotsでは、\bigcup_n M_nが最小元を持つと限らないため、このような極限について閉じていない。この二つの違いは、群の公理がすべて\Pi_1論理式(\Pi_2でも可)で書けるのに対し、全順序集合における最小元の存在が\exists m.\;\forall x.\;m\le xという\Sigma_2論理式になる点である。

それに対し、昨日こういう質問をした:群は単位元をfixしなくても\exists e.\;\forall x.\;ex=xe=xという\Sigma_2論理式で公理化できるが、もしそうしたなら極限で閉じなくなるのだろうか。答えは「閉じる」。これは群論の話である。今日の補足説明では、群ではなくモノイドについて、単位元をfixしなかった場合に列の極限が単位元を持たなくなる例が示された。

一方、極限で閉じることと公理がすべて\Pi_2論理式で書けることが同値であるという定理が存在するため、群の単位元の存在は\Pi_2論理式で公理化できるはずである。それはxx^{-1}のようなしょうもない話ではない。なぜなら、逆元をfixしなくても積さえ共有していれば群は極限について閉じるからである。

つまり群の公理は積のみを用いた\Pi_2論理式で書ける。その具体的な形は、集中講義を聴いておられた先生によって与えられた。詳しい形は覚えていないが、確か\forall x.\;\forall y.\;\forall z.\;(xz=yz\land zx=zy)\rightarrow x=yのような積のキャンセルを使っていたはず。

今日も講義後に質問しに行ったら学年を聞かれて、D1であることを白状した。学部生への擬態失敗。すると何やら飲み会に誘っていただけた。明日の講義後、教員と博士課程の学生のみで行うらしい。光栄な話なので参加することにした。

学食で食事し、院生室に戻ってきたが、今日は麻雀を打つ人が足りない。仕方がないので帰宅し、ゲーセンに遊びに行った。

閉店まで18クレプレイ。今日は12+のスコア詰めをして全譜面99↑に乗せたり、「周防パトラ」イベントのクエストを完走したりした。

ラーメンを食べて日付が変わってから帰宅。ハーメルンを読みふけり、午前3時半くらいに寝落ちした。

10/10(木)

午後0時半起床。少しハーメルンを読み、買っておいたパンを食べて午後2時くらいに家を出た。今日も天気が良いが、大学から店まで集団で移動するため原付を使えない。郵便局に寄る必要もあり、せっかくなので徒歩で登校することにした。

地下鉄を使うのとほぼ同じ30分で着いたものの、延々坂道を歩かされたのでめちゃくちゃ疲れた。原付を使えないほど天気・足元が悪いときに歩きたい道ではない。ないが、火曜日みたいなシチュエーションで終電より麻雀を優先するのが視野に入ってきた。

午後3時から集中講義三日目。ある元が満たす論理式をすべて集めて作る「タイプ」という概念はかなり面白かった。講義で「タイプ」と言われていたのでなかなか気づけなかったが、これはプログラマ的には「型」と訳してほしいものだろう。もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルに違いない……。

これまでピッタリ午後6時に終えてきた講義だが、今日は30分早めに終わった。院生室で少し時間を潰し、午後6時半に青葉山駅に集合。そこから地下鉄に乗ってイタリアンレストラン「Notti vago」に向かった。

参加者は集中講義の先生と東北大の教員4名、学生は自分を含む3名で全員D1。論理学の話だとついていけないかもなあと心配していたが、もっぱら学生だけで地元のことや同期のことについて喋っていたため問題なし。非常に楽しかった。自分の専門であるグラフや、趣味のプログラミングにも興味を持ってもらえて嬉しい限り。こちらから相手の専門に歩み寄るタイミングがなかったので、それは申し訳なかった。

あまりたくさんお酒を飲んだつもりはないのだが、少し騒がしいテーブルで大声で喋っていたら酔いが回るのも速くなり、かなりフラフラになった。日付が変わる前に帰宅。布団に倒れこんで少しハーメルンを読み、午前1時過ぎに寝落ちした。

10/11(金)

午前6時に目を覚ました。微妙に気持ち悪さが残っているが、うっかりハーメルンを開いてしまい眠気が遠ざかった。幸い4時間ほどして二度寝に成功。追加で3時間寝て、午後2時前に起きたら元気になっていた。シャワーを浴びて原付で登校。

午後3時から集中講義最終日。一瞬だけマトロイドの話が出てきてびっくりした。代数的閉包の一般化が定義できて、公理にうまい性質があるとマトロイドにおけるexchange propertyが成立する。すると閉包を使って定義された基底の濃度が一致してくれるらしい。無限マトロイドのことは何も知らないので、有限集合でなくてもマトロイドっぽいことが成り立つこと自体驚きだった。ところで基底というからには全体をspanしてほしいのだが、これもexchange propertyがないと保証できないようだ。

午後6時終了。今回の集中講義は信じがたいことに毎日時間内に終了した。

学食で食事して麻雀。2半荘打って2回とも2着だった。内容はあんまり覚えていない。

午後10時前に帰宅し、ハーメルンを読んだ。「ようこそ享楽至上主義の教室へ」を読了。

書く

syosetu.org

午前3時就寝。

10/12(土)

午前8時に目を覚ました。ハーメルン「ようこそ享楽至上主義の教室へ IF等まとめ」を読了。

書く

syosetu.org

追加で3時間寝て、午後0時半くらいに起床。シャワーと食事を済ませ午後2時からUniversal Cupに参加した。今日は12回目、Qinhuangdaoセット。

書く

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

Panasonic Programming Contest 2024(AtCoder Beginner Contest 375) - AtCoder

書く

www.youtube.com

日記を書いていたつもりが、いつの間にか麻雀のフラッシュゲームに手を出していた。CPUが喰いタンのみとかダマのピンフのみとかでポンポン上がってくるため普段と感覚が違う。また自分が上がって気持ちよくなるのを優先してしまい、危険牌を考える意識が薄れてきた。1回きりのゲームでは適当に打ってしまってよくない、が、雀魂などで腕を磨くというほどのモチベーションもない。

無料で遊べる麻雀ゲーム「麻雀」GAMEDESIGN

少しハーメルンを読んで午前9時就寝。

10/13(日)

午後3時に目を覚まし、3時間ほどハーメルンを読んだ。それから二度寝して午後8時起床。食事とシャワーを済ませて午後9時からARC185に出た。

AtCoder Regular Contest 185 - AtCoder

書く

www.youtube.com

ハーメルンの短編「走れセリヌンティウス」を読了。「走れメロス」ほどの名作文学作品を原作知識あり憑依転生の舞台にするのは新鮮。ただ原作の雰囲気が失われてしまったという点で好きではなかった。

syosetu.org

午前4時半からCF #978 div.2に出た。普段とは全く異なる時間帯のコンテスト。途中で外が明るくなってきて、なんだかワクワクした。

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

書く

www.youtube.com

日記を書いて正午くらいに就寝。