週記(2022/12/26-2023/01/01)

工事中

12/26(月)

午後2時半ごろ起床。布団でしばらくハーメルンの更新を読んでいた。小一時間経ってようやく布団から脱出。

大学生協に向かい、菓子パン等と予約していたラノベを購入した。これが年内最後となるはずだ。本来は12/28に発売されるラノベも数冊予約しているが、その日はICPCで仙台にいないし翌日から生協が年末休業に入るので、受け取りは年明けになる。

帰宅してインターン先の定例会に参加。今週も進捗は特になく、タスクは先週金曜日に言っていた軽いもののみである。

勉強会はマネジメントの話だった。質問することの心理的安全性については数学のセミナーでも覚えがある。自分の疑問が学部レベルの知識かもしれないと思うと聞くのを尻込みしてしまうが、今はたった4人でやっているので気軽にセミナーを止めることができる。

終わってから先週の週記を投稿した。年内最後だが今回も校閲できていない。この後の時間はICPC準備に充てるつもりだったのに、開放感からうっかりYouTubeを見て1時間以上の時間を無駄にしてしまった。

ICPC準備、特にライブラリの印刷に取り掛かる。コロナ禍前と同じく以下のツールを使った。以前印刷したときのファイルを見るとタイムスタンプが2019年11月の日付になっていて、かなり懐かしい。

GitHub - maze1230/Library-TeX-Generator: 競プロのライブラリからTeXファイルを作る

手持ちのライブラリから必要なものを抜き出し、さらに自分では持っていないが持ち込みたいライブラリを用意する。ei1333さんのライブラリとbeetさんのライブラリを眺めていくつか窃盗した。さらにACLからもO(\log N)二分探索付きセグ木を持ってきた。

https://ei1333.github.io/library/

https://beet-aizu.github.io/library/

全部集めてツールを動かす。日本語が含まれると壊れるらしく、さらに一度動かすとTeXの機能でキャッシュか何かが残ってしまうため、解決に結構手間取った。なんとかコンパイルしてPDFを用意し、印刷。20ページを両面印刷して、A4用紙10枚ぶんとなった。

シャワーを浴びてからチーム紹介ドキュメントのメイキング記事を書いた。明日印刷されたものを手に入れたら写真を撮って貼るだけで公開できるようにしておきたかった。

すでに午前3時。そこから明日の持ち物の準備をして、就寝は午前4時半だった。

12/27(火)

今日明日がICPCアジア地区横浜大会だった。この期間のことは大体参加記の方に書いてある。日記では、ICPCにあまり関係ないと思って参加記に書かなかったことを補足するだけに留める。

01/18追記:参加記を投稿した。

kotatsugame.hatenablog.com

午前8時起床。この15分前にも目覚ましをかけていたはずだがそちらは気づかなかったらしい。ちょっと危なかった。

朝食は午前9時過ぎ、仙台駅の立ち食いそば屋で、肉うどんだった。

昼食は正午ちょっと前に横浜駅のレストラン街のパスタ屋。朝食が思ったより腹に残っていたため、サラダとデザートのみをそれぞれ単品で頼んだ。自分たちが入店してすぐ正午を回り、それから一気に行列が伸びた。かなりタイミングが良かったらしい。

夕食は午後7時から、中華街の中華。2018年も中華街で食べたはずだが、どの店で食べたか最早記憶にない。お酒を少し飲んだ。やはりビールは苦手である。中華のコーンスープは好物なので、また食べられて良かった。

夜解いていたPCKの問題は、具体的には2021年予選の6問目から11問目。

11問目は多分O(HW(R+C)\log(R+C))で解いたはず。考慮する長方形領域をずらして差分更新することを考えると、値の追加・削除・下からK番目の取得がO(\log)くらいでできれば嬉しい。Kが定数なので下位K個とそれ以外に分割して値を保管すればよく、multisetで可能。

しかしこれは手元で5.5secくらいかかってしまった。高速化ポイントが2箇所。まず、multisetをやめて削除可能priority_queueを使った。削除用のキューも持っておいて、値が一致する限り取り出すテクである。

次に、領域をずらすとき、以前は左端から右端にずらし終えたらまたリセットして左端から開始していたのを、ジグザグにずらして一切リセットしないようにした。以上を実装すると1.3secで通った。

https://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=7256954

午後10時ごろにシャワーを浴びた。午後11時半くらいに上の問題が通って、それから少しだけ今日の行動記録をつけて就寝。今日はツイートもブラウザの閲覧履歴も少ないので、日を置くと何をしていたかわからない時間帯が増えてしまうのだ。

12/28(水)

午前6時半起床。昨日解いた問題についてSSRSさんからリプライが来ていた。O(\log)が落とせるらしい。更新回数O(HW(R+C))回に対し取得回数がO(HW)回なので、取得の方に計算量を押し付けると良さそう。

朝食は午前7時、ホテルのビュッフェだった。

朝のスキマ時間に昨日のCF #841 div.2を解いた。参加記にも書いたように、そんな短時間では解き終わらなくて集合時刻に少し遅刻してしまった。

Dashboard - Codeforces Round #841 (Div. 2) and Divide by Zero 2022 - Codeforces

Aは一つの要素以外全部を1に揃えるのがよい。Bはできるだけ対角線に近いマスを通るべきで、\sum_{k=1}^n k^2+\sum_{k=1}^{n-1}k(k+1)=2\sum_{k=1}^n k^2-\sum_{k=1}^n kが答え。

Cは累積XORを見れば揃える平方数を決め打つごとにO(n)で数え上げられる。考えるべき平方数はだいたい\sqrt{2^{18}}個しかない。

Dは二分探索。判定がO(nm)で行えて、答えとしてあり得る範囲が[1,\min(n,m)]なので思ったより高速だった。

E。コストに対して辺の候補を数えるのは、約数包除でO(n\log n)になる。そこからどうすれば良いか迷ったが、貪欲に取ったら通った。未証明。

Fは和の和なので寄与を考える。il={\rm lsl}(i)g={\rm grr}(i)を固定し、a_i=xに対し何通りの列があり得るかを計算してみると、x多項式になった。x=1\dots kに対してその和を取るには、あらかじめ多項式補完で\sum_{x=1}^k x^jの形の値を求めておけばよい。

午前0時前に帰宅し、一息ついてシャワーを浴びてからJAGにメールを送った。ここまでが参加記に書いてあること。

結構な時間TLを眺めて過ごした後、スポンサーブースを回って集めてきたものの整理をした。大きなものとしてはやはりKLabさんの技術同人誌だろう。パラパラめくって感想をツイートした。

その後何故かハーメルンの捜索掲示板を開き、朝方まで1作読んでいた。昨日と同様に今日の分の行動記録をつけ、午前7時就寝。

12/29(木)

午後1時起床。2時間ほどハーメルンを読んでから布団を脱出した。今日は帰省する日。インターンの12月分の稼働記録を整理し、ゴミを出してから、荷物をまとめて午後4時半ごろ出発した。

これまでずっと自由席で帰省していたが、今回は指定席。仙台から大宮まで1時間強、乗り換えが10分で大宮から富山までが2時間弱と、合計しておよそ3時間で着いてしまった。かなり速くてびっくり。混雑の度合いはなかなかのもので、満席とアナウンスされていたことを記憶している。道中はずっとラノベを読んでいた。

富山駅からは迎えに来てもらった父の車で移動。途中本屋に寄ってもらって、大学生協で注文せず残しておいた本を買い揃え、帰宅した。新幹線車内で読んでいたものはこのうちの一冊で、それだけ仙台駅の本屋で購入していた。

年末帰省した時に買って読む用として、ちょうどその時期に出版される本のうち何冊かはわざと注文しないままにしておいた。楽しみにしているシリーズの続刊があり、生協の開店を待たず入手できるという点でも嬉しい。

週記(2022/12/12-2022/12/18) - kotatsugameの日記

夕食を摂ってからリビングのこたつに潜り込んだら、小一時間出られなかった。なんとか脱出して入浴。午後11時過ぎに布団に入り、しばらくラノベを読んで午前1時前に就寝した。

12/30(金)

午後2時過ぎ起床。少し日記を書いてから昼食を摂った。

THIRD プログラミングコンテスト 2022(AHC017)のトップページが公開されていた。インターン先がまたしてもコンテストを開いてくださるらしい。AI開発部についてまず最初に書かれることがメンバーのレーティングというのは、前もって確認させてもらったときから思っていたがやはりインパクト抜群。TLでもそういう反応を見つけてニヤニヤしていた。

AtCoder Heuristic Contest 017 - AtCoder

外出。礼服を購入してもらう。自分くらいの年齢になると一着持っておくべきらしい。

帰宅して夕食を摂ってからラノベを読んでいた。「最強魔法師の隠遁計画」16巻を読了。前の巻でストーリーが一段落し、この巻はその後始末と次の展開への助走という感じだった。実はこれまで数巻かけて進行してきたのは書籍版オリジナルストーリーで、なろう版としてはまだ第4部が終わっていない。第5部冒頭のアルスが第1魔法学院を視察する話はかなり好きなので、早く本で読めないかとかなり前から心待ちにしている。

https://ncode.syosetu.com/n5606cq/

入浴し、午後11時半からCF。Good Bye 2022に出た。

Dashboard - Good Bye 2022: 2023 is NEAR - Codeforces

書く

5完298位で2773→2705(-68)。勘弁してくれ。

失意にまみれてラノベを1冊読了。「俺は星間国家の悪徳領主!」6巻。相変わらず面白かった。記憶によれば、この作品のなろう版を読んだときはこの巻かその少し後のストーリーまでしか投稿されておらず、その後読み進めてもいないため、7巻からは真に知らないストーリーが展開されるのではないだろうか。期待している。

YouTubeを見たりハーメルンの更新を読んだりして、午前6時半就寝。

12/31(土)

午後2時半過ぎ起床。昼食を摂ってからは夕方までずっと日記を書いていた。まだ月曜日の分も書き終えられていない。火曜日に突入してからはICPC参加記と並行して書き進めていた。参加記と日記の内容の違いについては、火曜日冒頭に書いた通りである。

午後6時半に夕食。年越しそばだった。

食休みのつもりでこたつに吸い込まれつつ、今年1年のレーティングhighest変化とこれまで解いた問題数をツイートした。結局CFのhighestは更新できず、なんならだだ下がりしたままの年越しとなる。今年解いた問題数は、カウントされているだけでも1500問程度らしい。

よくよく思い出してみれば、今年はLGMタッチしかけたことがあった。9月はじめの問題剽窃でUnratedになった回である。結局その後からずっと調子を落としたままだったので、せっかくのチャンスに余計なことをしてくれたなという気持ちがふつふつと湧き上がる。

昨日のCFで問題の剽窃が発覚し、Unratedになっていた。

週記(2022/09/05-2022/09/11) - kotatsugameの日記

普段AtCoderでの自分の動向を見守ってくれている父だが、それ以外のサイトは見たくてもよくわからないと言っていたので、CLISTを教えた。

kotatsugame - Coder - CLIST

日付が変わる直前まではまた日記、もとい参加記を書いていた。年が変わる少し前に今月・今年の読書記録を集計し、ツイート。なんと今年買った本の過半数を積んでいるらしい。もうどうしようもない。

以下は年が変わる前後のツイート。毎年同様のツイートをしていたのに、去年はPASTを解いていて失敗したのだった。

年が変わったので、2023年用の読書記録と買った本の記録の記事を作った。

読書記録(2023) - kotatsugameの日記

買った本の記録(2023) - kotatsugameの日記

またしばらく参加記を書き、午前2時半ごろ布団へ。ブロク記事をいくつか読み1時間ほどしてから寝た。読んだのは他参加者のICPC参加記と、おすすめなろうまとめ二つ。後者についてはありがたくも自分のものを参考にしたと言っていただけている。リンクを貼っておく。

furutsuki.hatenablog.com

turtle0123-kyopro.hatenablog.com

01/01(日)

午前9時半起床。朝食はお雑煮とおせちだった。食べてからしばらくして外出。

まず祖母の家に言って挨拶した。車から降りる際にスマホを落としてしまい、後から確認したら貼っているガラスフィルムにヒビが入ってしまっていた。幸先が悪い。

次に、少し遠くの神社に初詣に行った。1999年生まれの自分は今年満25歳。本厄に該当するので、本殿に上がって厄除のご祈祷をしてもらった。実はこのためにスーツを着てきていた。

最後に昼食を摂って帰宅。

晦日に「沼ですが(しばし沈黙)。」から始まるツイートをしようと思って、忘れてしまっていた。同じ考えの人がいないか探したら見つかって救われた気分になった。

日付が変わる前までずっと本を読んでいた。「11文字の檻」を読了。ノンシリーズ短編集と言って、著者の青崎有吾さんがいろんなところで発表した短編・ショートショートを集めているらしい。特に関連しない短い話を立て続けに読むのは思ったより疲れた。また、ミステリ要素のない作品はどれもあまり好みではなかった。

ただそういう感想を全部覆い隠してしまうくらい、書き下ろしの「11文字の檻」が面白かった。閉鎖空間での試行錯誤はワクワクするし、日数が記録されてどんどん経過していくのも良い。後者については、何かがカウントされているという点で「〔少女庭国〕」や「二〇〇〇一周目のジャンヌ」を思い出した。

本を読んでいる間に行ったことについて。夕食は午後7時だった。また午後9時からしばらくの間、「笑わない数学」というテレビ番組の録画を見た。確率論の回と、ガロア理論の回。

確率論の回はモンティ・ホール問題に多くの時間が割かれていて、知っているならそれ以上特に目新しいことはない。

ガロア理論の回はよくわからなかった。ある程度講義で習ったはずだがあまり覚えておらず、曖昧な記憶や知識との食い違いばかり気になってしまった。正四面体の対象変換は12種類で、図でも12個描いてあったのに、これを表す群がS_4とされていた。それは4次の対称群で、サイズは24ではなかっただろうか。

入浴後、飲酒しながら参加記を書いていた。一合瓶で3本分空けてフラフラになった。

午前3時に布団に入り、少しなろうを読もうとしてすぐ寝落ちした。

買った本の記録(2023)

kotatsugame.hatenablog.com

kotatsugame.hatenablog.com

1月

クラスで2番目に可愛い女の子と友だちになった3
転校先の清楚可憐な美少女が、昔男子と思って一緒に遊んだ幼馴染だった件6
お見合いしたくなかったので、無理難題な条件をつけたら同級生が来た件について6
ガリ勉くんと裏アカさん1
俺は知らないうちに学校一の美少女を口説いていたらしい4
美少女にTS転生したから大女優を目指す!1
アストラル・オンライン2
英雄と賢者の転生婚3
黄金の経験値
お隣の天使様にいつの間にか駄目人間にされていた件8
ひきこまり吸血姫の悶々10
VTuberのエンディング、買い取ります。
完璧な俺の青春ラブコメ
VTuberなんだが配信切り忘れたら伝説になってた6
転生王女と天才令嬢の魔法革命6
スパイ教室09
僕は、騎士学院のモニカ。
王立魔術学院の《魔王》教官II
魔王のあとつぎ
探偵はもう、死んでいる。8
さあっ候補生さま、“王霊討伐”の時間です

2月

隣の席の美少女をナンパから助けたら、なぜかクラス委員を一緒にやることになった件
才女のお世話5
990年後に復活した最恐魔王、人類殲滅を決意する。
死にたがりのシャノン
親友歴五年、今さら君に惚れたなんて言えない。2
精霊幻想記23
虚構推理短編集 岩永琴子の密室
孤高の暗殺者だけど、標的の姉妹と暮らしています
勇者症候群
キグナスの乙女たち5
転生したら皇帝でした4
サイレント・ウィッチV
遺品博物館
薬屋のひとりごと13
双星の天剣使い2
魔王にさらわれた聖王女ですが、魔王城ぐらしがヒマだったので禁忌魔法で暴れます。
反逆者として王国で処刑された隠れ最強騎士1
異能学園の最強は平穏に潜む
クラスの大嫌いな女子と結婚することになった。7
ウォーゲーム・ハイスクール
Vのガワの裏ガワ2
ランジェリーガールをお気に召すまま4
ノーゲーム・ノーライフ12
世界で一番『可愛い』雨宮さん、二番目は俺。
やはり俺の青春ラブコメは間違っている。結2
アラサーがVTuberになった話。2

3月

愛蔵版〈古典部〉シリーズI
灰原くんの強くて青春ニューゲーム4
剣聖女アデルのやり直し1
男嫌いな美人姉妹を名前も告げずに助けたら一体どうなる?
恋は双子で割り切れない5
魔王城、空き部屋あります!
お兄様は、怪物を愛せる探偵ですか?
異世界でチート能力を手にした俺は、現実世界をも無双する13
異世界でチート能力を手にした俺は、現実世界をも無双する ガールズサイド2
スパイ教室 短編集04
囚人諸君、反撃の時間だ
ネットの『推し』とリアルの『推し』が隣に引っ越してきた1
無能と言われ続けた魔導師、実は世界最強なのに幽閉されていたので自覚なし2
凡人探索者のたのしい現代ダンジョンライフ1
許嫁が出来たと思ったら、その許嫁が学校で有名な『悪役令嬢』だったんだけど、どうすればいい?2
28歳フリーターが総理大臣と総選挙で戦ってみた
ライアー・ライアー13
魔女の怪談は手をつないで
友人に500円貸したら借金のカタに妹をよこしてきたのだけれど、俺は一体どうすればいいんだろう4
自作3Dモデルを売るためにサキュバスメイドVtuberになってみた
日本語が話せないロシア人美少女転入生が頼れるのは、多言語マスターの俺1人3

4月

時々ボソッとロシア語でデレる隣のアーリャさん6
継母の連れ子が元カノだった10
冴えない僕が君の部屋でシている事をクラスメイトは誰も知らない3
女友達は頼めば意外とヤらせてくれる
ねぇ、もういっそつき合っちゃう?4
不敗の名将バルカの完璧国家攻略チャート1
第三皇女の万能執事1
悪役御曹司の勘違い聖者生活
未練タラタラの元カノが集まったら
うしろの席のギャルに好かれてしまった。3
公女殿下の家庭教師14
死亡退場するはずの“設定上最強キャラ”に転生した俺は、すべての死亡フラグを叩き折ることにした
王様のプロポーズ4
ロクでなし魔術講師と禁忌教典22
金属スライムを倒しまくった俺が【黒鋼の王】と呼ばれるまで
君は医者になれない
理系彼女と文系彼氏、先に告った方が負け
創成魔法の再現者5
バズれアリス1
転生魔王の勇者学園無双1,2
ギャルに優しいオタク君
破壊神様の再征服
迷子になっていた幼女を助けたら、お隣に住む美少女留学生が家に遊びに来るようになった件について4
なーんにもできないギャルが唯一できるコト
見習い聖女の先導者
男子禁制ゲーム世界で俺がやるべき唯一のこと1
義妹生活8

5月

最凶の魔王に鍛えられた勇者、異世界帰還者たちの学園で無双する4
箱入りお嬢様と庶民な俺のやりたい100のこと その1
凶乱令嬢ニア・リストン2
黄金の経験値II
戦物語
メイジアン・カンパニー6
痴漢されそうになっているS級美少女を助けたら隣の席の幼馴染だった8
ひきこまり吸血姫の悶々11
メイデーア転生物語6
「キスなんてできないでしょ?」と挑発する生意気な幼馴染をわからせてやったら、予想以上にデレた
放課後はケンカ最強のギャルに連れこまれる生活
どんなことでも褒めてくれて、過保護で溺愛してくる大魔法使い様
貴族令嬢。俺にだけなつく2
公務員、中田忍の悪徳6
さぁ、悪役令嬢のお仕事を始めましょう
探偵はもう、死んでいる。9
灰の世界は神の眼で彩づく1
攻撃力ゼロから始める剣聖譚1
現代ダンジョンライフの続きは異世界オープンワールドで!2
現役JKアイドルさんは暇人の俺に興味があるらしい。1
俺は星間国家の悪徳領主!7
一生働きたくない俺が、クラスメイトの大人気アイドルに懐かれたら4
ロジカ・ドラマチカ
魔王のあとつぎ2
バスタード・ソードマン

6月

俺は知らないうちに学校一の美少女を口説いていたらしい5
お見合いしたくなかったので、無理難題な条件をつけたら同級生が来た件について7
なぜかS級美女達の話題に俺があがる件
極めて傲慢たる悪役貴族の所業
クラスで2番目に可愛い女の子と友だちになった4
陰キャだった俺の青春リベンジ4
孤高の暗殺者だけど、標的の姉妹と暮らしています2
彼とカノジョの事業戦略
VTuberなんだが配信切り忘れたら伝説になってた7
魔王2099 3
VTuberのエンディング、買い取ります。2
双星の天剣使い3
お嬢様(じつは庶民)、俺の家に転がり込む
あなたの事が好きなわたしを推してくれますか?
異世界でチート能力を手にした俺は、現実世界をも無双する14
教室に並んだ背表紙
ブラックな騎士団の奴隷がホワイトな冒険者ギルドに引き抜かれてSランクになりました9
迷宮狂走曲1
男子禁制ゲーム世界で俺がやるべき唯一のこと2
シャーロック+アカデミー
ランジェリーガールをお気に召すまま5
男嫌いな美人姉妹を名前も告げずに助けたら一体どうなる?2
灰原くんの強くて青春ニューゲーム5
才女のお世話6

7月

青春2周目の俺がやり直す、ぼっちな彼女との陽キャな夏
やがてラブコメに至る暗殺者
転生したら皇帝でした5
わたしの幸せな結婚 七
スパイ教室10
迷子の女の子を家まで届けたら、玄関から出て来たのは学年一の美少女でした
転生王女と天才令嬢の魔法革命7
ホーンテッド・キャンパス21
変人のサラダボウル5
りゅうおうのおしごと!18
不死探偵・冷堂紅葉
ドラゴンズロアの魔法使い
可燃物
魍魎探偵今宵も騙らず
ライアー・ライアー14
現代転生した元魔王は穏やかな陰キャライフを送りたい!
無能と言われ続けた魔導師、実は世界最強なのに幽閉されていたので自覚なし3
幼馴染たちが人気アイドルになった1
異能学園の最強は平穏に潜む2
アラサーがVTuberになった話。3
TS衛生兵さんの戦場日記

8月

精霊幻想記24
剣聖女アデルのやり直し2
アストラル・オンライン3
恋愛相談役の親友♀に、告白されたことを伝えたら
なーんにもできないギャルが唯一できるコト2
喋らない来栖さん、心の中はスキでいっぱい。3
女友達は頼めば意外とヤらせてくれる2
FPSゲームのコーチを引き受けたら依頼主が人気VTuberの美少女だった1
サイレント・ウィッチVI
俺のアパートがダンジョンになったので、最強モンスターを従えて楽々攻略
スパイ≒アカデミー
都合のいい地雷系彼女とカラダだけの関係を
堕天使設定のV系ヴォーカリスト、召喚された異世界で救世主となる
公女殿下の家庭教師15
師匠に借金を押し付けられた俺、美人令嬢たちと魔術学園で無双します。2
夜の帳に闇は閃く
勇者症候群2
彼とカノジョの事業戦略2
S級冒険者が歩む道
シャーロック+アカデミー2
義妹生活9
ブラックガンズ・マフィアガール
夏凪渚はまだ、女子高生でいたい。1
ネットの『推し』とリアルの『推し』が隣に引っ越してきた2
反逆者として王国で処刑された隠れ最強騎士2
凡人探索者のたのしい現代ダンジョンライフ2
ログアウトしたのはVRMMOじゃなく本物の異世界でした4
劣等眼の転生魔術師7

9月

幼女戦記13
最強の力を持ってしまった幼なじみの2人、ダンジョンにて全力で蹴落とし合う
時々ボソッとロシア語でデレる隣のアーリャさん7
俺がどんな選択をしようがSS級美少女たちが全力で注目してくる
最強魔法師の隠遁計画17
天才女優の幼馴染と、キスシーンを演じることになった1
ガリ勉くんと裏アカさん2
英雄と賢者の転生婚4
友人に500円貸したら借金のカタに妹をよこしてきたのだけれど、俺は一体どうすればいいんだろう5
あと十五秒で死ぬ
ツンデレ魔女を殺せ、と女神は言った。
浜村渚の計算ノート 10さつめ
探偵は友人ではない
人数合わせで合コンに参加した俺は、なぜか余り物になってた元人気アイドルで国宝級の美少女をお持ち帰りしました。1
「キスなんてできないでしょ?」と挑発する生意気な幼馴染をわからせてやったら、予想以上にデレた2
お隣の天使様にいつの間にか駄目人間にされていた件8.5
理系彼女と文系彼氏、先に告った方が負け2
その王妃は異邦人
悪ノ黙示録
生贄に捧げられた俺は、神に拾われ武を極める
クラスのプライド高めなお嬢様。家では俺のメイド
異世界でチート能力を手にした俺は、現実世界をも無双する ガールズサイド3
王様のプロポーズ5
金属スライムを倒しまくった俺が【黒鋼の王】と呼ばれるまで2
盤上に君はもういない
池袋ウエストゲートパークXVII
ライアー・ライアーSS
灰の世界は神の眼で彩づく2
あたしは星間国家の英雄騎士!2
現役JKアイドルさんは暇人の俺に興味があるらしい。2
午後のチャイムが鳴るまでは

10月

幼女戦記14
富豪令嬢
くだものナイフと傷だらけのリンゴ1
箱入りお嬢様と庶民な俺のやりたい100のこと その2
凶乱令嬢ニア・リストン3
陰キャだった俺の青春リベンジ5
薬屋のひとりごと14
攻略できない峰内さん
間の悪いスフレ
やがてラブコメに至る暗殺者2
レベル0の無能探索者と蔑まれても実は世界最強です
赤点魔女に異世界最強の個別指導を!
悪役御曹司の勘違い聖者生活2
黄金の経験値III
ひきこまり吸血姫の悶々12
ぎんなみ商店街の事件簿 Sister編,Brother編
公務員、中田忍の悪徳7
【悲報】お嬢様系底辺ダンジョン配信者、配信切り忘れに気づかず同業者をボコってしまう
世界で一番『可愛い』雨宮さん、二番目は俺。2
玉葱とクラリオン1
魔術探偵・時崎狂三の事件簿
双星の天剣使い4
貴族令嬢。俺にだけなつく3
ロクでなし魔術講師と禁忌教典23
愛蔵版〈古典部〉シリーズII

11月

父娘のおいしい食卓
迷子になっていた幼女を助けたら、お隣に住む美少女留学生が家に遊びに来るようになった件について5
許嫁が出来たと思ったら、その許嫁が学校で有名な『悪役令嬢』だったんだけど、どうすればいい?3
男子禁制ゲーム世界で俺がやるべき唯一のこと3
探偵はもう、死んでいる。10
三傑のサッカーは世界を揺らす!
お酒と先輩彼女との甘々同居ラブコメは二十歳になってから1
依存したがる彼女は僕の部屋に入り浸る
極めて傲慢たる悪役貴族の所業II
クラスで2番目に可愛い女の子と友だちになった5
男嫌いな美人姉妹を名前も告げずに助けたら一体どうなる?3
北欧美少女のクラスメイトが、婚約者になったらデレデレの甘々になってしまった件について1
攻撃力ゼロから始める剣聖譚2
バスタード・ソードマン2
かませ犬から始める天下統一1
U-15サッカー日本代表だけど部活は幼馴染と一緒の文芸部です
灼眼のシャナS IV
君の先生でもヒロインになれますか?
ソードアート・オンラインIF
人類最初の殺人
不死探偵・冷堂紅葉2
有名VTuberの兄だけど、何故か俺が有名になっていた
VTuberなんだが配信切り忘れたら伝説になってた8
あなたの事が好きなわたしを推してくれますか?2
放課後はケンカ最強のギャルに連れこまれる生活2
双子まとめて『カノジョ』にしない?
これが魔法使いの切り札
彼女でもない女の子が深夜二時に炒飯作りにくる話
スパイ教室11
ロクでなし魔術講師と禁忌教典24
悪役好きの俺、推しキャラに転生
スクール=パラベラム
あとはご自由にどうぞ!
転生したら皇帝でした6
甘党男子はあまくない
クラスの大嫌いな女子と結婚することになった。8
多元宇宙的青春の破れ、唯一の君がいる扉
俺の背徳メシをおねだりせずにいられない、お隣のトップアイドルさま
ライアー・ライアー15
ただの村人の僕が、三百年前の暴君皇子に転生してしまいました
地雷グリコ
煽り煽られしてたネトゲ仲間が品行方正な美人先輩だった話

12月

サイレント・ウィッチ-another-上
小国家の英雄王子1
煽り系ゲーム配信者(20歳)、配信の切り忘れによりいい人バレする。1
クラスで一番かわいい女子はウチの完璧メイドさん
最強の剣聖、美少女メイドに転生し箒で無双する1
バズれアリス2
先生も小説を書くんですよね?
ねぇ、もういっそつき合っちゃう?5
灰原くんの強くて青春ニューゲーム6
凶乱令嬢ニア・リストン4
才女のお世話7
俺が告白されてから、お嬢の様子がおかしい。1
継母の連れ子が元カノだった11
好きな子の親友に密かに迫られている
血の繋がらない私たちが家族になるたった一つの方法
転校先の清楚可憐な美少女が、昔男子と思って一緒に遊んだ幼馴染だった件7
双子探偵ムツキの先廻り
ミステリ・ラビリンス
メイジアン・カンパニー7
永遠についての証明
禁断の罠
やる気なし天才王子と氷の魔女の花嫁授業
りゅうおうのおしごと!盤外編1
S級冒険者が歩む道2
性別不詳VTuberたちがオフ会したら俺以外全員女子だった
強すぎて学園であぶれた俺。ボッチな先生とペア組んだら元王女だった
ジェノヴァの弟子
この恋、おくちにあいますか?
探偵に推理をさせないでください。最悪の場合、世界が滅びる可能性がございますので。

読書記録(2023)

kotatsugame.hatenablog.com

kotatsugame.hatenablog.com

1月

  • 1日
    11文字の檻
  • 2日
    あたしは星間国家の英雄騎士!1
  • 4日
    現代社会で乙女ゲームの悪役令嬢をするのはちょっと大変4
  • 6日
    紅蓮戦記2
    ブラックな騎士団の奴隷がホワイトな冒険者ギルドに引き抜かれてSランクになりました8
  • 13日
    クラスで2番目に可愛い女の子と友だちになった3
  • 14日
    黄金の経験値
  • 15日
    ガリ勉くんと裏アカさん1
    迷子になっていた幼女を助けたら、お隣に住む美少女留学生が家に遊びに来るようになった件について2
  • 18日
    迷子になっていた幼女を助けたら、お隣に住む美少女留学生が家に遊びに来るようになった件について3
  • 20日
    完璧な俺の青春ラブコメ

2月

  • 12日
    隣の席の美少女をナンパから助けたら、なぜかクラス委員を一緒にやることになった件
  • 17日
    才女のお世話4
  • 18日
    才女のお世話5
  • 22日
    ネトゲの嫁が人気アイドルだった3
    ひきこもりの俺がかわいいギルドマスターに世話を焼かれまくったって別にいいだろう?3
  • 23日
    転生したら皇帝でした1
  • 24日
    転生したら皇帝でした2
  • 27日
    Vのガワの裏ガワ2

3月

  • 2日
    世界で一番『可愛い』雨宮さん、二番目は俺。
    異能学園の最強は平穏に潜む
  • 20日
    灰原くんの強くて青春ニューゲーム4
    双星の天剣使い2
  • 22日
    反逆者として王国で処刑された隠れ最強騎士1
    お隣の天使様にいつの間にか駄目人間にされていた件8
  • 23日
    異世界でチート能力を手にした俺は、現実世界をも無双する13
    魔王城、空き部屋あります!
    お兄様は、怪物を愛せる探偵ですか?
    囚人諸君、反撃の時間だ
  • 25日
    無能と言われ続けた魔導師、実は世界最強なのに幽閉されていたので自覚なし2
    ネットの『推し』とリアルの『推し』が隣に引っ越してきた1

4月

  • 4日
    28歳フリーターが総理大臣と総選挙で戦ってみた
  • 14日
    悪役御曹司の勘違い聖者生活
    未練タラタラの元カノが集まったら
    許嫁が出来たと思ったら、その許嫁が学校で有名な『悪役令嬢』だったんだけど、どうすればいい?2
  • 16日
    転生したら皇帝でした3,4
  • 17日
    日本語が話せないロシア人美少女転入生が頼れるのは、多言語マスターの俺1人3
  • 19日
    自作3Dモデルを売るためにサキュバスメイドVtuberになってみた
    女友達は頼めば意外とヤらせてくれる
  • 27日
    第三皇女の万能執事1
    死亡退場するはずの“設定上最強キャラ”に転生した俺は、すべての死亡フラグを叩き折ることにした
  • 29日
    転生魔王の勇者学園無双1,2
  • 30日
    王様のプロポーズ4
    金属スライムを倒しまくった俺が【黒鋼の王】と呼ばれるまで

5月

  • 3日
    最凶の魔王に鍛えられた勇者、異世界帰還者たちの学園で無双する4
    凶乱令嬢ニア・リストン2
    迷子になっていた幼女を助けたら、お隣に住む美少女留学生が家に遊びに来るようになった件について4
    なーんにもできないギャルが唯一できるコト
  • 4日
    不敗の名将バルカの完璧国家攻略チャート1
  • 22日
    「キスなんてできないでしょ?」と挑発する生意気な幼馴染をわからせてやったら、予想以上にデレた
  • 24日
    黄金の経験値II
    放課後はケンカ最強のギャルに連れこまれる生活
  • 29日
    一生働きたくない俺が、クラスメイトの大人気アイドルに懐かれたら4

6月

  • 1日
    極めて傲慢たる悪役貴族の所業
  • 2日
    俺は星間国家の悪徳領主!7
  • 5日
    さぁ、悪役令嬢のお仕事を始めましょう
  • 8日
    クラスで2番目に可愛い女の子と友だちになった4
    なぜかS級美女達の話題に俺があがる件
    灰の世界は神の眼で彩づく1
  • 11日
    攻撃力ゼロから始める剣聖譚1
  • 23日
    異世界でチート能力を手にした俺は、現実世界をも無双する14
  • 28日
    あなたの事が好きなわたしを推してくれますか?

7月

  • 25日
    魔王2099 3
    迷子の女の子を家まで届けたら、玄関から出て来たのは学年一の美少女でした
  • 26日
    現代転生した元魔王は穏やかな陰キャライフを送りたい!

8月

  • 1日
    才女のお世話6
    無能と言われ続けた魔導師、実は世界最強なのに幽閉されていたので自覚なし3
  • 11日
    ノッキンオン・ロックドドア2
  • 13日
    叫びと祈り
  • 18日
    女友達は頼めば意外とヤらせてくれる2
    FPSゲームのコーチを引き受けたら依頼主が人気VTuberの美少女だった
  • 19日
    VTuberなんだが配信切り忘れたら伝説になってた6,7
  • 20日
    時々ボソッとロシア語でデレる隣のアーリャさん4.5,5
  • 22日
    時々ボソッとロシア語でデレる隣のアーリャさん6
  • 24日
    都合のいい地雷系彼女とカラダだけの関係を
    俺のアパートがダンジョンになったので、最強モンスターを従えて楽々攻略
    ギャルに優しいオタク君
  • 25日
    バズれアリス1
  • 29日
    遺品博物館
    ネットの『推し』とリアルの『推し』が隣に引っ越してきた2
    ログアウトしたのはVRMMOじゃなく本物の異世界でした4
  • 30日
    S級冒険者が歩む道
  • 31日
    お嬢様(じつは庶民)、俺の家に転がり込む

9月

  • 1日
    男子禁制ゲーム世界で俺がやるべき唯一のこと1,2
  • 3日
    迷宮狂走曲1
  • 5日
    最強の力を持ってしまった幼なじみの2人、ダンジョンにて全力で蹴落とし合う
  • 6日
    ガリ勉くんと裏アカさん2
    最強魔法師の隠遁計画17
  • 7日
    バスタード・ソードマン
  • 9日
    ブラックな騎士団の奴隷がホワイトな冒険者ギルドに引き抜かれてSランクになりました9
  • 13日
    ありふれた職業で世界最強13
  • 25日
    お隣の天使様にいつの間にか駄目人間にされていた件8.5
  • 26日
    悪ノ黙示録
  • 28日
    クラスのプライド高めなお嬢様。家では俺のメイド

10月

  • 2日
    探偵は友人ではない
  • 3日
    灰の世界は神の眼で彩づく2
  • 4日
    「キスなんてできないでしょ?」と挑発する生意気な幼馴染をわからせてやったら、予想以上にデレた2
    凶乱令嬢ニア・リストン3
  • 7日
    富豪令嬢
  • 10日
    午後のチャイムが鳴るまでは
  • 11日
    黄金の経験値III
  • 12日
    攻略できない峰内さん
  • 16日
    赤点魔女に異世界最強の個別指導を!
  • 17日
    悪役御曹司の勘違い聖者生活2
    人数合わせで合コンに参加した俺は、なぜか余り物になってた元人気アイドルで国宝級の美少女をお持ち帰りしました。
  • 18日
    間の悪いスフレ
  • 19日
    ロジカ・ドラマチカ
  • 23日
    世界で一番『可愛い』雨宮さん、二番目は俺。2
  • 31日
    魔術探偵・時崎狂三の事件簿

11月

  • 1日
    極めて傲慢たる悪役貴族の所業II
    バスタード・ソードマン2
  • 3日
    かませ犬から始める天下統一1
  • 7日
    許嫁が出来たと思ったら、その許嫁が学校で有名な『悪役令嬢』だったんだけど、どうすればいい?3
    依存したがる彼女は僕の部屋に入り浸る
    三傑のサッカーは世界を揺らす!
  • 11日
    君の先生でもヒロインになれますか?
  • 14日
    男子禁制ゲーム世界で俺がやるべき唯一のこと3
    北欧美少女のクラスメイトが、婚約者になったらデレデレの甘々になってしまった件について1
  • 15日
    クラスで2番目に可愛い女の子と友だちになった5
    有名VTuberの兄だけど、何故か俺が有名になっていた
  • 16日
    レベル0の無能探索者と蔑まれても実は世界最強です
    人類最初の殺人
  • 19日
    双子まとめて『カノジョ』にしない?
  • 22日
    悪役好きの俺、推しキャラに転生
    スクール=パラベラム
  • 29日
    甘党男子はあまくない
    俺の背徳メシをおねだりせずにいられない、お隣のトップアイドルさま
  • 30日
    彼女でもない女の子が深夜二時に炒飯作りにくる話

12月

ICPC2022チーム紹介ドキュメントのメイキング

char*A="PEPH50"    "MEPDRCRD)4Q)9"       "CRBSBSBSBY"    "FHBGF$>HBHEHB"   
"GFNGGBGFHBGGGB<"  "+GFNGGBS2%BGGGB"   "2;YF+AHBRCHEHB"  "RBSBQDSBP0$DRC$" 
":G/)$?FGD+:QCGMP" "!%EGGGEMEGZ4Z4/(" "Z4Z%=0JMEGGGBSUQ" "CGGGBST%(SBGGGBS"
"THEH"     "B48GG" "GHGZ"     "GGG2=" "BGGGH"    "GZGGG" "BGGG"     "HGZHE"
"H22B"      "HEHH" "GZSB"     "SHGZ+" "BQDQ"      "I29G" "//0("     "Z&D0@"
"MHMK"      "GG&", *T="char*A=%c%s%c" ",*T="      "%c%s" "%c;#define/*QQ*/"
"Q(X)"     "char*" "M=#X,m[12345],c"  ",Toho"    "ku,Un" "iv;Xint/*Q*/spr" 
"intf(char*,const" "char*,...),i,j"   ",k=1,putchar(int" "),f=34;Q(%s)";   
#define/*QQ*/Q(X)  char*M     =#X,m[   12345],c,Tohoku,  Univ;X            
int/*Q*/sprintf    (char*      ,const    char*,...),i    ,j,k=1            
                                                                           
                      ,putchar(int    ),f=34      ;Q(int main(){i=j;typedef
                    void**M1;sprintf  (m,T,f      ,A,f,f ,T,f,M);for(;(c=A[
                   i++]);)for(;c-->9+ 56;k++      %75?:~ putchar(10)){k=k+!
                   putchar    (i%2==1 ?(4|(c      ==65||       k%75==      
                   0))&f?      f^=5,+ 34:+(f      ^=m[j]       ==34,m      
                   [j++])      :040); for(;m      [j]==1       <<5;)j      
                   ++;}f=f    ;struct ICPC{;}    Asia();       signed      
                   ***kotatsugame(M1) ;f=2022/12/27-28+f       ;short      
                    **ha15(M1);enum{   Aobayama_dropout        };long      
                      mine691(M1);       Tohoku=Univ;          i=k;})      

Aobayama_dropout_2022.c · GitHub

https://ideone.com/sQTnyu

参考:一昨年、昨年の記事

kotatsugame.hatenablog.com

kotatsugame.hatenablog.com

はじめに

今年もアスキーアートQuineを作りました。これが最後の年です。

去年と同様メイキング記事を書きました。インターン先の勉強会で発表したときのスライドで大体は説明してあるので、それを補足するような形になっています。

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

1. AAを用意する

AA

今年は「DROPOUT」を2行に書きました。特に参考にしたフォントはなく、手作業で角に丸みをつけたりしています。まず1文字の幅を\lfloor 75/4\rfloor=18マス、縦棒の太さを18/3=6マスと決め、そこから「D」の文字を実際に作ってみて横棒の太さ3マス、文字の高さ10マスとしました。

そもそもマスの縦横比を2対1にしているので、見た目では同じ太さということになります。漢字なら縦棒を横棒より太くしたいところですが、アルファベットの場合、特にこういう半ば図案化したようなフォントにはあまり似合いませんでした。また高さも、これ以上高くすると間延びした印象を受けました。

実は「D」が完成すれば残りはほとんどそれのコピペで書けてしまいます。まず右半分を左に鏡映しにして「O」、その上半分を消して縦棒を伸ばし「U」。また、上下を少し縮めて縦棒を伸ばし「P」、その右下に足をつけて「R」ができます。最後の「T」は直線なので、棒の太ささえ決まっていれば迷うことがありません。

すべて完成してから、マス目に余裕があったので文字の間を1行・1列開けることにしました。余裕といえば、チーム紹介ドキュメントは60行まで使えるので「AOBAYAMA」という文字も書くことができますが、付け足した分を無意味なコードで埋めることになるだろうし、AAを作ってみたら思ったより見栄えが悪かったので、「DROPOUT」のみにしました。

2. AAを圧縮する

ランレングス圧縮して数列を文字列にするのは前2回と同様です。今年は空白が長く連続する箇所があってちょっと扱いづらかったため、最大25文字でいったん区切ることにしました。

最後に調整した結果圧縮した文字列の長さが243文字だとちょうど良かったので、そうなるよう適当な数を詰めています。

all=gets(nil).gsub(/\n/,'')
a=[0]
t=' #'
all.each_char{|c|
  if t[a.size%2]==c
    a<<0<<0 if a[-1]==25
  else
    a<<0
  end
  a[-1]+=1
}
while a.size+2<=243
  i=rand(0..a.size)
  a[i,0]=[0,0]
end
a<<0 if a.size<243
STDERR.puts "WARNING" if a.min<0||a.max>25
STDERR.puts a.sum==all.size
STDERR.puts a.map.with_index(1){|c,i|t[i%2]*c}.join==all
Base=65
puts a.map{|c|c>0 ? (c+Base).chr : ([*33..Base]-"\"'*,-.".bytes).sample.chr}.join

3. 展開するコードを書く & 4. 不完全なQuineを作る

基本的には昨年と同じですが、マクロの引数内に文字列を置かないようにしました。

マクロの引数内にある文字列もAAに合わせて分割するのですが、文字列リテラルを並べる方法だと、そのために使った"が変な位置に残ってしまい、出力時にさらに"が追加されてQuineになりません。昨年はエスケープを使って改行を無視し、空白を含む一つの文字列とすることで対応したものの、出力フラグの管理がちょっと複雑でした。

ということで、昨年マクロの引数内にあったsprintfのテンプレート文字列がマクロの外側に出ています。これでフラグ管理が非常に簡単になりました。文字の出力部を抜き出してみます。

putchar(i%2==1?(4|(c=='A'||k%75==0))&f?f^=5,'"':(f^=m[j]=='"',m[j++]):' ')

去年より明らかに短くなっています。fの最下位bitで文字列リテラルの内か外か判定し、分割のため直前に"を出力したかどうかをfの下から3番目のbitに持っています。fは別の用途にも使っていて初期値が34、つまり0b100010なので、こういうことになっています。

また、昨年は諦めてしまった「警告が出ないアスキーアートQuineを書く」という目標を達成しました。これについてはほとんどスライドに書いてありますが、追加で1点。#includeを書かなかったのには、その行がコメントだらけになって見栄えが悪くなるほかにも理由がありました。

1行をそのために使ってしまうと当然全体的にコードが下にずれます。すると、putcharという7文字のキーワードを置く位置が最下部にしかなくなってしまうのです。そこは昨年のようにチーム名等で埋めたかったので、嬉しくありませんでした。

5. 文字の位置を調整する

辛いだけで、根気よく揃えていくと何とかなりました。最下部をどのように埋めたかだけ説明したいと思います。

                   ++;}f=f    ;struct ICPC{;}    Asia();       signed      
                   ***kotatsugame(M1) ;f=2022/12/27-28+f       ;short      
                    **ha15(M1);enum{   Aobayama_dropout        };long      
                      mine691(M1);       Tohoku=Univ;          i=k;})      

下4行を取り出してきました。かなりいろいろ埋め込めたので自分としては非常に満足しています。ここで未使用の変数を宣言すると警告が出てしまうのですが、幸い関数とすることで回避できるようでした。

まず構造体の名前に「ICPC」、その関数「Asia」。除算や減算を日付だと思って「2022/12/27-28」、これは横浜大会の開催日です。また列挙型も警告が出ないようなので、enumの定数として「Aobayama_dropout」を書きました。「Tohoku=Univ」については、上部をパディングする際に宣言しておいた二つの変数を並べています。

我ながら一番うまくいったなと思うのが、メンバーのハンドルネームと学年を埋め込んでいる部分です。ちゃんとポインタ*で列を揃えることすらできました。実は上のほうでtypedef void**M1としていたので警告は出ず、それぞれ適当な型の関数になります。その型もsigned***short**longといろいろ取り揃えてみました。

完成!

実行結果とともに

enumが太字になるようで少しずれたのが残念です。

印刷されたもの

週記(2022/12/19-2022/12/25)

12/19(月)

午前8時少し前に起床。今日から集中講義である。夜中に降った雪が多少残っていたので、登校に原付を使うのは避けることにした。結構早めに起きたのでそれでも間に合うくらい。

徒歩で大学に向かい、川内北キャンパスのいつもの学食で朝食を摂ったあと、さらに隣のキャンパス、つまり川内南キャンパスに移動。以前場所をチェックしておいた文学研究科棟の講義が行われる教室にたどり着いた。思ったより小さな教室に思ったより沢山の人がいて、始まるころには席が完全に埋まっていた。

文学部のキャンパスに足を運んでみた。集中講義のための偵察である。教務課に突撃して教室がある建物を教えてもらって、実際に足を運んで確認。

週記(2022/11/28-2022/12/04) - kotatsugameの日記

いよいよスタート。講義のタイトルは「理論言語学研究演習I」であり、月・火・水は1限から4限まで、木は3限までの全15回の予定。初回の今日は、午前中は自己紹介とイントロダクション、午後は基礎知識のおさらいだった。

自己紹介によれば、自分以外の全員が文学部・文学研究科の言語学を専攻する学生らしい。院生は当然研究テーマを持っているし、学部生でも自分の卒論テーマがあったり、少なくとも興味のあることを説明できていた。

その中で自分は全くの興味本位の履修ということもあり、ちょっと腰が引けてしまう。自然言語処理というキーワードに惹かれたと説明したが、それもよく考えれば自分の専攻と関係ない。また言語学関係の講義を受けたことがないのもほぼ自分だけのようだ。

イントロは……理解できたのかどうかがわからない。計算心理言語学・計算神経言語学についての講義であること、この学問は人間の言語処理を計算機上でモデル化しようとするものであること、講義は言語処理の要素ごとに人間の処理と機械の処理を比較して進められることが説明された。日本語にすればこれだけだが、実際に何をやるかということは全くイメージできなかった。

昼休み。朝しっかり食べたのであまりお腹が空いておらず、また正午過ぎということで学食が非常に混んでいたため、総菜パンを買って済ませることにした。

午後は言語学、数学、神経科学の基礎だった。まず言語学について、この講義では音韻論、形態論、統語論、意味論と分けて扱うらしい。順に、音声→文字列→単語列→構文→意味という言語処理の流れの矢印に対応するという認識をしている。これらが言語処理の要素であり、人間と機械に共通するということで、明日明後日の午前・午後で一つずつ解説していくようだ。

これで言語学の基礎は終わりらしい。身構えていたので少し拍子抜け。次の数学の基礎は確率論についてで、講義スライドはベイズ統計などいろいろ書いてあって思ったよりレベルが高いなと思ったが、説明されたのはベイズの定理だけで非常に簡単だった。異世界転生したような気分。先生が板書で積の記号としてなぜかアスタリスクを使っており、しかも悪筆なので足し算に見えたのが印象的だった。

最後に神経科学の基礎。脳波の図がいろいろ出てきて理科のようだった。眠くてそれ以上の印象は残っていない。

午後4時過ぎに終了。またキャンパスを移動し、いつもの購買で予約していたラノベを買って帰宅した。

家に到着したころにはインターン先の定例会が始まっていたので、遅れて参加した。先週のうちに遅刻すると連絡しておいたが、思ったより早く参加できてよかった。先週の進捗は金曜日の1on1で行ったペアプログラミングのみで、今週も特に何もしませんと報告して終了。

勉強会はGitを自分で作ってみるという話。最近投稿された以下の記事と関係あるかなと思ったら特になく、現在のGitの仕様をいくつか再現したコードの解説だった。Gitの作法やテクニックについては何度か勉強会で扱われた記憶があるが、実装に踏み込むというのは目新しい。仕様の細かい話が聞けて良かった。

Gitは最初1244行しかなかった

集中講義の教室変更の連絡が来ていた。今日ですら満員だったのに明日からの教室はもっと小さいらしく、急遽別の部屋を取ったようだ。新しい教室は川内北キャンパスにある。近くなったのは嬉しい。

深夜までずっと先週の週記を書いていた。午後11時過ぎにひとまず書き上げて投稿。当然校閲も何もしていない。CFに間に合わせようと必死だった。

少し空いた時間で帰省の日程を考えた。12/28がICPC二日目で、いったん仙台に帰ってくる。その後Good Bye 2022が12/30らしいので、12/29に帰省することにした。慌ただしいが頑張りたい。

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

Dashboard - Codeforces Round 840 (Div. 2) and Enigma 2022 - Cybros LNMIIT - Codeforces

Aはbitごとにソートする感じ。Bは高々O(k)回のシミュレートでダメージを与えられなくなるか全員を倒せる。

Cは難しい。隣接する2要素に対して2回操作すると0を作れて、それと最大値を組み合わせて操作できれば一番よい。これを使って、n\ge 4の場合は必ずすべての要素を最大値に揃えることができる。n=2の場合は簡単。n=3の場合がどうしようもなかったので、思いつく限りの操作を試すことにした。3WAしつつ何とか通した。

Dはkを固定し、そこからn-1\dots 1の順で左右どちらに並べるかdpした。1ケース当たりO(n^3)だが定数倍が軽いのでかなり高速だった。

Eは強連結成分ごとに対応する三角数がreachableなペアに寄与する。unidirectionalなペアの数を最大化するには強連結成分を一直線に並べるのが最適。検索するとどんな非負整数も高々3個の三角数で表せるらしいので、それを全探索してみた。しかしWA。どうやら4個以上使うのが最適なケースもあるらしい。冷静になると単にdpするだけでも遷移が各状態からそれぞれO(\sqrt p)通りしかないので、間に合う。

Fはかなり面倒だった。abを結ぶどれかのパスに乗る辺であって橋でないものを数えたい。2頂点連結成分分解か2辺連結成分分解を使うはずで、前者は持っていないし詳しくもないので後者で考えることにした。成分に分解した後は木になるので、abを結ぶパスが1通りになる。

謎の制約から、例えば\inftyのような形をした成分はない。よって2辺連結成分上のどの辺についてもそれを通るパスが存在するはず。よって唯一のパスの上にある2辺連結成分が含む辺数を数えればよいと考えた。しかしWA。2辺連結成分に入って同じ頂点から出ていく場合、その成分の辺を通ることができない。この原因がわかるまで4ペナ重ねた。

修正は気合い。分解するときに成分と成分の境界となるような頂点をチェックしておき、両端とLCAについてはクエリごとに処理、その間は前計算の時に考慮して数えることで対応した。コンテスト終了3分前に書き終え、提出したら通った。

かなり不安だったのでシステスを見守っていた。何とか全部通って全完8位。

午前2時過ぎに布団に入り、しばらくハーメルンを読んで3時前に就寝。

12/20(火)

午前8時起床。昨日と同様徒歩で登校し、学食で朝食を摂って教室に向かった。先生が迷ったらしく、講義開始は少し遅れた。

午前は音韻処理の話。うずまき管という器官で音を周波数要素に分解しているがこれはフーリエ変換であるとか、異なる種類の音素を聞いたとき脳の異なる領域が活動しているので、音素の分類には人間の都合以上にしっかり意味があるとかの話が面白かった。

人間は音を一定時間ごとに区切って認識しているようなので、機械で音声認識する場合もそうやって区切り、区間ごとに特徴量を抽出してそれぞれ音素に当てはめることになる。この時直前までの音素も参考にして、認識したい言語としてどれが一番もっともらしいかを調べるそうだ。直前の音素のみを考慮することで隠れマルコフモデルとして扱い、ビタビアルゴリズム等で決定する。あるいは最近だと再帰ニューラルネットワークでやってしまうのが主流らしい。

午前10時から1時間は先生が会議に参加するため休憩となった。この間寝ていたら休憩後もずっと眠気が取れなかったので、昼休みはずっと本を読んでいた。満腹による眠気を避けるため昼食も摂らなかった。

午後は形態処理、つまり形態素解析の話。MeCabだ!と思ったらMeCabという単語は一切登場しなかった。

人間が単語を目にするときと耳にする時では、その情報が脳に到達するまでの時間が異なるのに、その後の脳の活動が経過時間も含め次第に似たようなものになるらしい。つまりその辺りが形態処理以降を司っている部位なのだが、まるで集積回路のクロックのように時間が揃うのは面白いなと思った。

機械の形態処理は音韻処理の時と同じで、音素を決定する代わりに品詞を決定するだけ。最初に単語を一般的な形にする前処理を行った後、隠れマルコフモデルにしたり、再帰ニューラルネットワークでやってしまったり。あまり目新しいことはなかった印象。

今日はちょっと早めの午後4時前に終わった。予約していたラノベを買って帰宅。しばらくTLを見たりYouTubeを見たりした後、再度外出した。

まずみどりの窓口に行って帰省用の新幹線の切符を買う。学割証だけはICPC用の切符を買うときに発行してあった。混むだろうからと指定席を取るよう言われている。仙台駅内のネット回線が込み合いすぎて時刻表を開けなかったので、窓口で遅めという希望を伝え探してもらった。あと10日もないしもう席が残っていないかもなと思ったら全然そういうことはなく、無事いい感じの時間の新幹線が取れた。

みどりの窓口を出てから駅の隅に仁王立ちし、今日の昼休みに読み進めて残り僅かになっていた本を読了。「池袋ウエストゲートパーク」15巻。

今日読んだのは短編四つのうち最後の一つだけで、他三つはかなり前に読んでいた。確か8月末のオンサイトに持っていって、その帰りだったはず。どれも嫌みではない含蓄があって非常に面白かった。それはシリーズ全体を通して言えること。

アクションシーンでも解決のシーンでもタカシの出番がたくさんあって嬉しい。特に二つ目の短編「西池袋ドリンクドライバー」のラストは解決の流れも含めかなり粋。普段見えないタカシの人間味がサラッと出てきて、読んでいてじんわりとした感動があった。

駅を出て本屋に寄り、さらにラーメンを食べてからゲーセンに向かう。午後7時半から午後11時くらいまで遊んでいた。今日は14+のAJが四つ。また手元をいくつか撮った。

スマホアームを忘れて店を出てしまい慌てて戻る一幕がありつつ、帰宅。シャワーを浴びる気力を蓄えるために、結構な時間TLを眺めてボーっとしていた。

撮った動画をツイートしてから布団に入り、午前1時半就寝。

12/21(水)

今日も午前8時起床、徒歩で登校、学食で朝食。

午前は統語処理、つまり構文解析の話。脳のどの領域が構文を捉える役割を果たすか調べるのに、普通の文と比較して「構文は正しいが意味を持たない文」を使う。そういう文のことを「ジャバウォッキー文」というらしい。鏡の国のアリスに出てくる「ジャバウォックの詩」に使われたいくつかの英単語が、ルイス・キャロルの創作だったことが由来。

機械の構文解析の話は、人間の言語を文脈自由文法で記述することから始まった。実際にはもう少し制限が弱いらしいが、ともかくこの文法をもとに構文木を作る。この制限の話の際、チョムスキー階層について言及されてオッとなった。

文章からボトムアップに木を作るのは区間dpで解けるなと思っていたら、紹介されたCYK法がまさにそのもののアルゴリズムだった。変換規則の出現確率を元に最もそれらしい構文木を作るのも、dpだと思えば自然な拡張。

ニューラルネットを使う場合は、dpテーブルをそれで埋め、構文木の復元自体はCYK法と同様に行うようだ。確かに、出力としてわざわざ木をエンコードするのは無駄か。

昼休み。今日も昼食は摂らず、ずっと本を読んでいた。

午後は意味処理の話。いろいろな観点で単語を分類し、それぞれ見せて脳のどの領域が活動するか調べた結果、脳全体に分散して意味というデータが保持されていることが分かったらしい。一方、脳の特定領域が委縮してしまった人が、意味性認知症というその名の通り意味をうまく記憶できなくなる障害を負うことが知られている。

つまり、意味が脳全体で表現されているとしても脳の一部で表現されているとしても矛盾してしまう。そこで現在は、分散して表現されつつもそれを繋ぐハブとなる領域が存在する、ということになっているらしい。正直身も蓋もないという気持ちになった。

機械の意味処理については二つの手法が紹介された。一つは述語論理とラムダ計算によるもので、単語にラムダ式や述語を対応させ、パースした構文に沿ってそれらを関数適用していくことで、文全体を表現するラムダ式を得るというもの。命題論理、述語論理、ラムダ計算とβ簡約などがサッと解説され、知っていることだらけで初日以来の異世界転生気分になった。

もう一つは単語ベクトルによるもの。隣接して現れる単語をカウントするだけでそれっぽい特徴量になるらしい。ベクトルの足し引きで意味の計算が行えるのもよく聞く話。本題とは関係ないが、aardvarkという英単語が何度か登場して面白かった。辞書順最小の一般名詞だからだろうか。実際に最小かどうかは知らない。

午後4時過ぎに終了。今日も今日とて予約していたラノベを買った。その後、学食の夜の部が午後5時からだと思っていたら30分早くなっていたので、開店を待って夕食を摂ってから帰宅した。

最近コンテストがなくてすっかりご無沙汰だったCodeChefのレーティングシステムが新しいものになったらしい。今は古いものと新しいものの2種類のレーティンググラフが表示されている。自分のレートはこの更新で2832→2889(+57)となったようだ。新しいレーティングシステムでも現在がhighestである。

Rating system update - Elo MMR final migration - announcement - CodeChef Discuss

明日は木曜日なので、いつも通り5限にTAがある。集中講義は3限で終わる予定なので、多少長引いたとしても余裕は十分にある。明日発表される資料が上がっていたので、読んでコメントをつける作業をした。

午後9時くらいに布団に入った。昨日も今日も眠くて仕方なかったので、今日こそたっぷり眠るつもり。本当は12時間睡眠をキメる予定だったのにすでに破綻しているし、その上布団でラノベを1冊読んでしまった。

「名探偵は推理で殺す」。バトルロイヤルに推理がどう関係するのかという点で、作中では推理が効くというルール自体を推理で導いていたが、ここがかなりこじつけに見えてあまり納得できていない。その他の推理シーンも同様。ではバトルそのものはというと、強そうな技を取りそろえる主人公であっても無双するわけではなく、自分の好みからは外れた。

さらにしばらくなろうを読んだため、結局就寝は午後11時半だった。

12/22(木)

午前7時半起床。二度寝するか迷っていたらそんな時間も無くなってしまい、午前8時前に布団から出た。いつも通り徒歩で大学に向かい、学食で朝食を摂る。今日は雨が降っていた。

午前は言語獲得の話。これは人間と機械の比較というよりそれぞれについての解説だった。

人間の文法はすべてを経験から獲得するということができない。なぜなら、経験する文はすべて文法的に正しいはずで、正しくない文、いわゆる非文は原理的に経験できないから。これを刺激の貧困という。経験しない文は非文であると考えると、今度はやたら複雑な文も全部使えなくなってしまう。よって人間は生まれつき文法に関する何らかの知識・仕組みを持っているはず。

これについて、一定の原理といくつかのパラメータを持っているとするモデルが紹介された。経験から強化学習のようにパラメータのオンオフを切り替え、言語特有の文法に合わせていくというもの。1文経験するごとにパラメータの学習が行われると文法がブレまくって不自然だから、バッチ処理が行われているらしい。またこのモデルの正しさを裏付ける証拠として、より多く経験する文法がより早い成長段階で獲得されるという事実がある。

余談的に「袋小路文」が紹介された。文法的に正しく意味のある文章だが、パースが難しく混乱してしまう文章のこと。大人はパースに失敗したら戻って再解析することができる一方、子供はそれができないらしい。

機械の言語獲得に関してはいろいろなニューラルネットワークが説明された。ただの再帰ニューラルネットワークでは文章中の長距離依存をうまく記憶できないので、それを何とかするためにLSTMを使ったり、Attension機構を取り入れたり。

前者のLSTMについては名前だけ聞いたことがあって、今日Long Short Term Memoryの略だということや長距離依存を記憶する仕組みを備えていることが知れてよかった。後者はいわゆるTransformerで、インターン先勉強会のためAlphaCodeのpreprintを読んだときに少し調べたことがあった。

最後に、文章から直接意味を抽出するようなニューラルネットワークでも、どうやら層ごとに形態素解析構文解析など普通の言語処理をやっていそうだという論文が紹介された。どうやってそういうことを調べたのかは知らないがかなり興味深い。

2限終了の時刻から30分ほど遅れて昼休み。今日も絶食して本を読んでいた。

3限はポスドクの方の講義で、脳情報を解析する話だった。データを処理するのにMATLABPythonを使い、評価にRを使ったらしく、かなり情報工学的な内容だった。それ以上はよくわからない。

その後まとめとレポート課題の説明があった。期限は01/13。〇〇について思うことを書けという曖昧な題意で、何を書いたものかよくわからない。講義の記憶が薄れないうちに手を付けたいとは思う。午後3時頃に今日の講義、ひいては集中講義の全日程が終了。

購買で菓子パンを買って食べた。さらに予約していたラノベを買った後、空き教室に入って5限まで本を読んでいた。1冊読了。

「貴族令嬢。俺にだけなつく」。主人公の前世の意識が今の身体に憑依したのが18歳時点で、すでに学園での評価が憑依前の横暴な性格で固定されてしまっていた。そこから数日でヒロインに受け入れられるというのはかなり違和感がある。この点は自分にとって受け入れがたく、以降の展開も冷めた見方をしてしまいうまく楽しめなかった。

先ほど買ったラノベはその前の巻を読んでいないものだから、これで読む本がなくなってしまった。5限までの残り時間は日記を書いていた。

TA。今日の発表は、先週の講義後にかなり長い時間練習してもらったし、昨日も発表資料にコメントをしたので、かなりいい感じに進んだと思う。1時間程度で終了。聞きながら気になる点があって指摘してしまったが、これもちゃんと昨日の時点で気づいてコメントに含めておくべきだった。

その後30分次の人の発表を行ったところで時間になった。これで今年の講義は終わり。来年はおそらく01/12からになるだろう。この先数回の発表予定を決めて学生は解散。自分はその後先生と少し話して別れた。

学食で食事して帰宅。疲れ果ててしばらくTLを眺めた後、午後9時くらいにシャワーを浴びてからTCB54に参加した。

https://techful-programming.com/user/event/3685

3問目まではよい。4問目は細かいことを考えるのが嫌だったので辺の通る順番と向きを全探索した。5問目は辺uvが奇閉路を作るかチェック。6問目はどこかで見たことのあるような問題で、連結成分内なら自由に値を移動できる。

7問目は、ただ入次数が0の種を数えてはいけない。強連結成分分解してから、入次数が0の強連結成分それぞれについて、含まれる種における個体数の最小値を答えに足す。

8問目はかなり面倒だったが一発で通ってハッピー。適当に根を決めて二つのパスをLCAで分割し、分割後の組み合わせ四通りについて解く。この変換をすると、パスが上下に伸びていると思ってよくなる。そのようなパス2本の共通部分は、下の頂点のLCAからスタートして上の頂点のどちらかに到達するまでなので、単純な深さの比較で書けてしまう。

9問目はちょっと大変。HLDをbeetさんのライブラリから窃盗してきて、セグ木を乗せた。コードを読んで演算の順序を確かめながらガチャガチャしていたらサンプルが合い、出したらそのまま通った。理論値獲得の制限時間21分のところ19分32秒だった。

Heavy Light Decomposition | library

ここまでは何とか理論値で通してきたが、10問目で大変なことになった。結論だけ書く。まず、2^k\mid Aとなる最大のk(ただしA=0の場合はk=N)を探す。B\leftarrow B\bmod{2^k}を考えて頂点0\dots 2^k-1を強連結にすればよい。どの頂点からも頂点0にはたどり着けるので、逆に頂点0から全頂点に行けるようにする。

Bのpopcountをi=0\dots kとし、これで分類して考える。i=0すなわちB=0の場合は明らかに2^k-1本の辺が必要。そうでなくi=kのとき、uu\oplus Bのどちらか一方につなぐのが必要最低限のため、2^k/2-1本必要。この-1は頂点0と頂点2^k-1のペアの分である。

0\lt i\lt kのとき、立っているbitがBに完全に含まれる頂点は、そうでない頂点からbitwise ANDでたどり着ける。よってBで立っていないbitが立っている頂点2^i\times(2^{k-i}-1)個について、i=kのときのようにペアのどちらか一方につなぐのがよい。ただしBのbitwise ORによってたどり着けるペアは無視する。

単純に考えれば、先ほどと同様1ペアずつ無視できるので、2^i/2-1本の辺が2^{k-i}-1セット必要になりそう。しかしi=1のとき2^i/2-1=0となり何かがおかしい。実はi=1のケースでは、無視するペアにBのbitwise ORによってたどり着くための元となる頂点が存在しないのだ。よってこのケースのみは2^{k-1}-1本の辺が必要である。

複雑な和を閉じた形にするのはWolfram Alphaに投げた。以上のことを実装するとようやくサンプルが合ってそのままAC。制限時間24分のところ47分使ってしまい、-23ptとなった。

その後ICPCチーム紹介スライドの準備を始めた。今日が提出期限。コロナ禍前の2019年のスライドを引っ張り出そうとしたがどこにもなかったので改めて作り直す。チームメイトから意見を集めた結果それなりに満足のいくものができた。1点、ワードアートに創英角ポップ体が使えなかったのが残念。手元のWordには入っていないようだ。この辺りを調べていたら日付が変わってしまい、微妙に期限後の提出となった。

しばらく日記を書いて午前3時半就寝。

12/23(金)

午後0時半起床。買ってあった菓子パンを食べて午後1時から1on1に臨んだ。

今週も特に何もない。こちらの進捗は当然ないし、振れるタスクもほぼないらしい。これから使いそうなツールが紹介されて、それを少し触ったり、運用についてアイディアを出したりするのが年明けまでのタスクとなった。1時間程度で終了。

少しコードゴルフした後布団に戻り、しばらくなろうを読んで、午後3時半ごろ寝落ちした。

起きたら午後5時半だった。今年最後のサークル活動をサボってしまい後悔が押し寄せる。目覚ましもかけてあったし、何ならそれを止めた記憶まである。しかし身を起こすことができなかった。

そのまま布団でなろうを読み続けていた。午前1時半頃寝落ち。

12/24(土)

午前9時に目を覚ました。ハーメルンの作品の書籍版情報が二つほど出ていた。

「バスタード・ソードマン」のほうは最近常にランキング上位にいるのに読んでいない。いい機会なので書籍版で読んでみたいと思う。作者が「東方遺骸王」の人なのでかなり期待している。

3時間ほどなろうを読んでまた寝た。次に、目覚ましで午後2時に起床。Xmas Contest 2022に出た。

Xmas Contest 2022 - AtCoder

Bだけ解いてDがわからず撤退。Dはカタラン数の母関数をC(x)として[x^m]C(x)^nが高速に取得できれば解けると分かったが、そこから先に進めなかった。m微分してx=0を代入する方針は見込みが薄そう。

Bは、結論から言えばSの先頭2k-1文字のうちAが多いかBが多いかとPと50の大小で決まる。エスパー気味に解いたが後から自分なりに理由を付けられた。

与えられたSについて、f_k(P)でくろうさがk問先取する確率を表す。ここでPは入力の定数ではなく変数と考える。明らかにf_k(50)=1/2。またf_k(P)Pに対して単調な関数となるだろう。ここは直感的にそうだからとしか言えない。

以上のことから、f_k(0)あるいはf_k(100)を考えf_k(50)=1/2との大小を調べることで、一般のPについてf_k(P)1/2との大小がわかる。先に確率1でk問先取するうさぎが現れるなら単純だし、そうでない場合はどちらが多くの問題を先取したかで決まる。整理すると先ほど述べた判定になる。2k-1問しか出題されないなら両方がk問先取することはない。

撤退したのが午後5時前で、それからずっと日記を書いていた。午後9時からABC283に出た。

UNIQUE VISION Programming Contest 2022 Winter(AtCoder Beginner Contest 283) - AtCoder

Aはdc。確かにこういう問題もfor文が解禁されないと出題できなかったのか。Bは言われた通りに実装。最初からAWKを使うか迷って、結局C++で書いた。Cは00を1文字に置き換えて文字列長を答える。bashsedとwcを使った。Dはビットで箱に入っているボールを表現し、これをスタックで管理した。

Eはちょっと面倒なdp。上の行からflipするか決めていって、直近2行の状態を持てば次の行として可能な操作が決まる。直近1行でよいと勘違いしたりして、実装には少し手間取ってしまった。

Fは端から順に見て行って、自分より右にある要素と左にある要素をそれぞれセグ木で管理。インデックスP_ii+P_ii-P_iを乗せ、区間MAXや区間MINを適切に取得すればよい。

GはAの各値を\mathbb{F}_2^{60}と見て、最上位bitがバラバラになるように基底を取り上位桁から決めていけばよい。いわゆるnoshi基底で十分だが真面目に対角行列を作った。

Exはfloor_sumという発想がスッと出てきた。Xを二進数表記したとき、2^kの位が\lfloor X/2^k\rfloor-2\lfloor X/2^{k+1}\rfloorと表せる。考えているすべてのXについてこの和を取るのはfloor_sumで行えて、k=0\dots\log_2 Nについての和を求めればよい。

40分6秒で全完し、7位。上に5人の日本人学生がいて賞金獲得ならず。6位の方は40分ちょうどだったので、6秒差で罰金2万円ということになる。悔しかったので、上で「迷って」「手間取って」「真面目に」などタイムが縮む余地のあった部分を強調したコメントを書いていた。ちなみにCを解いた後1分ちょっとVimのコードを検討している。結局縮まなかったしこれが一番無駄だった。

コードゴルフ。Aは当然dcの3Bが最短で、FAは取れなかったが最短は取れた。BはやはりAWK。Cは最初に書いたbashが最短だった。Dは後述。Gはnoshi基底を使うコードをRubyで縮めておいた。他は手付かず。

Dは嘘解法が通っていた。閉じ括弧の度に箱を空にするという、正直目を疑うようなもの。とはいえ通るならそれで縮めない道理はない。この嘘解法が通るということを念頭に置けば、答えがNoとなる条件が「文字列中に同じアルファベットが間に閉じ括弧を挟まず現れる」になるため、正規表現で一発で判定できる。sed

朝までずっと日記を書いていた。今週は全然書けておらず今日だけで月曜日から金曜日まで一気に仕上げることになった。月曜日はICPCのための準備に充てたいので、今日明日の分もしっかり明日で終わらせるようにしたい。

午前7時半ごろあさかつに参加した。数分遅れたが何とか優勝。5問目はグラフが非連結というコーナーケースをしっかり踏んづけてしまった。

https://kenkoooo.com/atcoder/#/contest/show/8afdf612-a5c4-47a8-a170-04f08a508103

午前8時半くらいに布団に入り、1時間ほどなろうを読んで寝落ち。

12/25(日)

午後3時半頃に一瞬起きてなろうを読んだ。昨日の時点でほぼ最新話までたどり着いていたので、すぐ1作読了。

https://ncode.syosetu.com/n2861ht/

「現人神様の暗躍ライフ」。非常に面白かった。世界の裏で暗躍するチート主人公というだけでも好みなのに途中から配信者要素が出てきて、好きなものてんこ盛りという感じ。設定上演劇として暗躍しているだけあって、地下のバーから組織のアジトに繋がっていたり、いちいち壺にはまる描写が多かった。

午後6時半起床。食事してしばらく日記を書き、午後9時からAGC060。

AtCoder Grand Contest 060 - AtCoder

Aはド典型。長さ3以下の部分文字列だけチェックすればよいので、直前2文字を持つdpで解ける。この事実は知っていたが念のため証明も付けた。

Bは謎。曲がり角に1bitずつ置くことでそのマスを通ることを強制することが思いついたが、提出したいのをぐっとこらえ順位表を確認するとかなりペナが出ていたため、考え直す。例えば2\times 3のマスをRDRと通るとき、曲がり角が二つあるのでK\ge 2が条件かと思いきや、K=1でもできるようだ。通るマスだけ、あるいは通らないマスだけに1を置くとよい。

通らないマスに置くのは拡張できそう。障害物を置くことで曲がる方向を制限するというイメージだ。1歩進んで曲がるのを2回繰り返すとき、曲がり角に置くと2bit必要なところ、障害物を置くと同じ値が使えて1bitで制限できると考えた。これを提出、しかしWA。

冷静になると、1歩進んで曲がるところが2連続している必要はなく、1か所あればその前後の曲がり角を障害物に置き換えられる。端の処理をしっかり考えて再提出し、何とかAC。

Cはかなり迷走した。ヒープで深さAの左端の要素と、深さBの右端の要素のどちらが大きいかを聞いている。隣の子とマージして1段上がるのを繰り返し、挿入dp的に自分が木の中で何番目に小さい要素かを考える方針が思い浮かぶが、木の要素が多すぎて現実的でない。また、1回マージしただけで確率の式が複雑な形になってしまった。この方針から抜け出すのに結構時間がかかった。

UVパス上の頂点の大小関係を考えることにした。ヒープ条件から、根、つまり頂点1を中心とする大小関係があるが、さらに左右の子の間でも調べるため、頂点1から左右の値が小さいほうにどんどん伸ばしていく。これで大小関係を固定することができるので、それぞれ確率なり場合の数を求められれば解ける。

パスに乗らない頂点はいくつかの部分木に分かれて、それらの内部でどのように並んでいるかは確率計算に関係ない。ただし部分木の外とどのような順番にあるかは考える必要があって、これは根から伸ばしていく向きだと考慮できない。パスを縮めていく向きに考えることで対処できる。現在のパスの端点から先にある部分木二つと今新たに足す部分木の頂点たちを並べる方法なら求められるということ。

この段階で一度コードを書いてみた。パスの両端点の深さを持つO(N^2)状態のdpだ。P_U\lt P_Vを満たすものに制限して計算した値を、制限を外して計算した値で割ることで確率が出る。サンプル3までは2^Nオーダーの数のcombinationを求められるので、とりあえず答えが出せる。無事合っていた。

遷移をぐっと睨むと、dpの値が多項係数のようになっていることに気づいた。ただし微妙に違う。\binom{a+b}{b}\times\binom{(a+b+1)+c}{c}=\frac{(a+b+c+1)!}{a!b!c!(a+b+1)}のようになるので、補正のためa+b+1で割っておく必要がある。逆にそれ以外の部分、つまり階乗が必要な値はP_U\lt P_Vの制限があってもなくても等しいため割り算するときに打ち消されるようだ。従って最初から無視してもよい。これもサンプル3まで通った。

dpの遷移がある数で割ることで行えるようになった。この数はだいたい2べきから1引いた数、あるいはその数二つの和で表される。998244353の倍数にならないことを祈ってサンプル4を試すと、何とか通ってくれた。遷移の度に逆元計算があるので5secちょっとかかっているが、TLがかなり長いので間に合うだろう。出したら通った。

Cに1時間半かけて残り1時間しかない。Dを読んで、とりあえず挿入dpで小さい値の答えを出してみた。挿入dpのテーブルの値などがOEISに載っていないか調べてみたところ、そもそも答えが載っていることに気づいた。しかししばらく調べてみたが当たり前のことしか書いておらず、高速な計算方法も見当たらなかった。そのままコンテスト終了。

A060350 - OEIS

3完79位でパフォーマンス2806、レートは2882→2875(-7)。赤パフォでレートが下がり厳しい気持ちになった。

Bの自分がとった方針は証明を付けられないので神に祈るしかなく、通せたのはラッキー。しかしペナを出した部分については最初の提出前に気づけても良かったので悔しさもある。

Cはまずdpを書いたのが良かった。dpを書いて高速化するというのは失敗することの多い方針だが、今回は遷移を整理することだけが必要だったのだ。正しいことを確認しながら一歩一歩進む上で、小さなサンプルが三つもあるのはかなりありがたかった。

Bだけコードゴルフした。整理すると、文字列中のDRあるいはRDを重ならないように取れる最大数がK以下であればよくなる。基本的に曲がり角の個数を数えていて、1歩進んですぐ曲がるケースだけ、具体的にはDRを取った後2文字目のRを次のRDに使えないため、個数が減る。入力回りで差がついたAWKが現在の最短。

TCB54が終了していた。今回はダメかと思っていたらそもそも全完が少なく、点数差で優勝できた。

日記を書かなければならないのに全くやる気が出ず、ラノベを2冊読了。

1冊目、「この教室は、武力に守られている」。微妙。裏社会で活躍する主人公ペアが学園に潜入して護衛任務をするというあらすじだが、学園の描写も護衛任務の描写もほぼ完全に独立していて、それぞれ中途半端な印象を受ける。授業中にテロリストが攻めてくるというよくある妄想が描かれるのを勝手に期待していた。ただし主人公ペアの正体がバレてしまうため、シリーズが続くことを考えると難しいのかもしれない。

2冊目、「異世界でチート能力を手にした俺は、現実世界をも無双する」12巻。面白かった。伏線などあってないような感じで毎巻新しいストーリーが展開され、しかも大体がその巻で一段落してしまうスピード感のため、内容がかなり濃く感じる。そんな中でシリーズ最初のほうの記述が少しずつ回収されているのが上手い。どこからかスクールアイドルの導入が生えてきたので、それが次巻描かれるかそれ以降か知らないが楽しみである。

しばらく日記を書いて午前7時過ぎに布団に入った。今日は土曜日の部分しか書けていない。明日に残すのは避けたかったが、生活リズム的にもこの時間に布団に入るのが最優先だった。1時間ちょっとネット小説を読んで就寝。

週記(2022/12/12-2022/12/18)

12/12(月)

午後4時過ぎ起床。

古典部シリーズが愛蔵版で出版されるらしい。まだ本に収録されていない短編が二つ含まれるようなので、ぜひ買いたい。こういうコレクターズアイテムはさすがに本の扱いがド下手くそな大学生協で予約する気にはなれない。地元で買えるとそのまま実家に安置できるので嬉しいが、タイミングが合わなければ仙台の本屋で予約することになるだろう。限定生産とあるのでちゃんと予約を忘れないようにしたい。

午後4時半からインターン先定例会。金曜日に少し進めたのが先週の進捗になり、今週はタスクがないし学業も忙しいので休むということを報告した。

勉強会はHTTPS通信の話。暗号化が絡むとかなり理解が苦しくなる。暗号化の方式を十分に知っているわけではないし、かといって完全にブラックボックスと見なすには挙動を知らなさすぎる。それ以外にもHTTPS通信には面倒なことがいろいろあるらしく、とにかく大変だということは分かった。

それらを終えたタイミングで先週の週記を投稿した。文章は昨日寝る前にほぼ完成している。校閲は……諦めた。いつかしたいが今はできない。というのも、明日のセミナー準備が何もできていないため。教科書の先週少し読み進めた部分については、定理の紹介と系だけで肝心の証明がなかったのでセミナーでは扱わないことにして、これからその続きを読む。

準備を進めながら月ノ美兎さんの登録者100万人耐久記念配信を見ていた。開始とほぼ同時に100万人に到達したようだ。むしろ配信開始までチャンネル登録を解除して待っていた人がいたらしい。僕は何も考えず直前にチャンネル登録してしまった。

www.youtube.com

午後11時くらいにセミナー準備が完了した。明日は補題を一つ紹介した後定理を一つ示す。この補題の証明は教科書のずっと先のほうにあるらしく、ここでは深く踏み入らないことにした。少し前の部分では証明がないから飛ばすと言っていたのでかなり基準がバラバラだが、大胆に飛ばしていかないといつまでたっても教科書を読み進められないこと、かといって読んだ端から飛ばしていてはセミナー準備ができないことからしょうがないものとする。

そこそこの疲労感を抱え明日のためにもう寝てしまおうと考えたところで午後11時半からECR139があることを思い出し、しばらく待って出た。

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

Aはよい。Bは長さ2の部分文字列で等しいものが二つとれるか調べる。ただし重なっている場合を除くことに注意。

Cは片方の端からもう片方の端へジグザグに進むしかない。両端の列にWが現れるようBだけの列を適切に切り落とすと、通るべき始点と終点がわかるので、その間を実際に辿ってみて解いた。最初に上下どちらの行にいるかを両方試せば切り落とす必要もなかったらしい。

Dは\gcd(x+k,y+k)=\gcd(x+k,y-x)を使う。y-x素因数分解して、素因数ごとにそれをx+kが含むための最小のkを考えればよい。y-x素因数分解は、エラトステネスの篩の際に素因数を記録する前計算によってO(\log(y-x))で行える。

Eは大変。0を無視し、丁寧に場合分けする。まず、1と2が隣接して現れるまでは一つの列で吸収できる。1の直後に2が現れ、二つ目の列ができたとしよう。このとき、3が現れないか、表れても直後に1が現れれば、二つの列の末尾が常に1と2になってすべて吸収できる。3の直後に2が現れても、その後1が現れる前に3が再度現れれば元通りになる。

ただ、3の直後に2が1個以上現れ、さらに続けて1が現れた場合のみ、三つ目の列が必要。そしてこれ以上多くの列は必要ない。今のことを正規表現っぽく書くと、/12/のあたりまではf=1、その後/32+1/のあたりまではf=2、残りはf=3ということになる。もちろんこれの1と2を入れ替えたパターンもあるが、結局調べるべきパターンは4種類しかないので、すべて気合いで管理した。一発で通って安堵。

Fは最小費用流が説明されて、典型だから少し変えた次の問題が解けますかと書かれていた。その問題も流量制限を加えるだけだから典型だろと思っていたら案外難しかった。まず容量が奇数の辺にはあらかじめ1流しておき、残りの容量を全部半分にすることで偶奇の条件を忘れる。

あらかじめ流した分だけいくつかの頂点は需要・供給点になっていて、この値は偶数でなければならない。ただし正確には、頂点1nはその限りではない。サンプル4に助けられた。あとは頂点nから頂点1への辺を作ってまず需要と供給を満たし、次に頂点1から頂点nまでコストが負の間流せるだけ流せば、求めるフローが得られる。

今言ったような2段階に分けず、需要と供給のための辺にめちゃくちゃ小さなコストをつけて必ず使われるようにしようとしたらWAだった。正直よくわかっていないが通ったのでOK。Library Checkerにフロー関係全部盛りの化け物みたいな問題があるらしく、ここから提出を拝借してきた人もいたようだ。

https://judge.yosupo.jp/problem/min_cost_b_flow

全完6位。この6位というのはopen hacking phase終了後の順位で、コンテスト終了直後は8位だったはず。Fで何人か落ちているのを見かけ戦々恐々としていたが、自分の提出は落とされなかった。

最近連載が始まったなろうを1作読了。「天外の観測者」。タイトル通り上位存在らしい主人公が人類を観測したり、眷属を通して干渉する話らしく、かなり楽しみ。現在連載されている最新話はちょうど主人公が今の状態に至るまでの話が終わったところで、ここからいよいよ干渉が始まるようだ。

https://ncode.syosetu.com/n8255hy/

しばらくTLを眺めた後午前3時頃に布団に入った。そこから1時間ハーメルンの更新をチェックして就寝。

12/13(火)

午前9時半ごろ起床したが、眠気でボーっとしていたら今日もセミナーに微妙に間に合わない時間となってしまった。

午前10時過ぎに大学に到着。午前中は同級生のセミナー。30分ほどしたところで寒さに耐えかね教室を移動することになった。エアコンが壊れてもう3週間目になるが、一向に直る気配がない。

エアコンが壊れているらしく非常に寒かった。

週記(2022/11/28-2022/12/04) - kotatsugameの日記

移動先の教室でそのまま正午過ぎまでセミナーを続行。今日はBöhm treeの一致に関する話だった。無限木になる可能性があるので、ラムダ式の構成に関する帰納法ではうまく言えないらしい。そこで、ノードが一致することをノードの深さに関する帰納法で一つずつ丁寧に見ていくことになった。

昼食を摂り、午後1時から自分の発表。証明の途中で目的がいまいち見えないとの指摘を受けた。そういえば、教科書には証明の前にアイデアと大まかな流れがしっかり書かれていたのに、そこを完全に無視してすぐ証明に突入してしまっていた。以前はそういうところも含めて発表の流れを考えられていたのに、今日忘れてしまったのは大失敗。反省。

また、終盤の議論がうまく伝わらなかった。ここはちゃんと教科書の記述をなぞりつつ、行間も埋めたと思っていたので、何が悪かったのかよくわかっていない。自分で付け加えた文言が何か混乱を招いたのだろうか。

午後3時前に終了。今日は博士課程の方の発表がないらしく、そのまま解散となった。帰宅し、準備してゲーセンに行く。午後4時半頃から閉店までいて30クレちょっと使った。グッズキャンペーンのため12/21までに貯める必要のあった30ポイントを今日だけで確保することに成功。

今日の成果はすごい。夕食を摂る前までは、新曲を埋めて理論値が一つ、またそれとは別に14+のAJを二つとパッとしない感じだったが、夕食から帰ってきて閉店までの2時間で15のSSSを三つ出した。

今日通常解禁された譜面。何回かプレイしていると前半の勝率はそこそこ確保できたが、後半は漫然とプレイしているだけではどうにもならない。改めて譜面をしっかり確認し、運指を考えた。

63小節目からはスライドのエアーを取る手をすべて逆にして、代わりにその近くのホールドを両手で取る。これで片手3鍵がほぼなくなるし、後からタップ交じりになるときも縦連が少なくて済む。またリズムに関して、ほとんどのところは慣れたら目押しで通るようになったものの、66小節だけ短いホールドが多くて辛い。しかしよく見るとほぼ同じ間隔である。そのことを意識したら劇的に改善した。

80小節からは左手親指を真ん中に固定して取った。右利きだから右手親指を固定したほうが良いのでは?と考えたもののうまくいかなかった。あとは急なトリルに対処できるよう譜面を覚え、頑張るしかなさそう。タップの巻き込みが辛いのは当然として、フリックもなかなか難しかった。固定しておいた左手を大きく動かす必要があって、意識の切り替えがうまくいかない。

最後は謎。初見の時は1アタで通ったのにそれからミスもアタックも大量に出るようになって大変だった。ただ、SSSを出したときはここに5-0で突入したはずで、気持ちに余裕があったのが幸いしミスは出なかった。

7kに乗せたときから運指はほぼ変わっていないはず。というか、何か考える前に出てしまったというのが正しい。結局92・93小節がうまくいけば出るというところまではたどり着いていて、今日はうまくいったので出た。全部右始動だということを確認したのがよかったのかもしれない。

手元を撮りながらX7124のSSSを狙っていた。

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

いつの間にかラストの超早い配置が通るようになっていて、すんなり出た。18・20・22・24小節あたりが苦手なのは相変わらずで、SSSを達成した回もそこで2-0出している。56-58小節は右手三つ左手三つを交互に繰り返して取っており、何も見えていないがうまくいくときはうまくいく。今日は勝率が高かった。ラスト、緊張でリズムが崩れたのか500点以上削られてしまい、少し心残り。

以上三つを立て続けに達成した後、Strange Loveを詰めていたらレート17を達成した。SSS+が導入されてからベスト枠の計算をしていないので今どのくらいかはわからない。

詰めていたStrange Loveについては結局6.6kくらいで終了。中盤までかなり良いペースで進むことが数回あったが、終盤がどうにもならない。うまくいくときもあったはずなので、狙えないわけではないと考えている。

日付が変わったくらいに帰宅。疲れてPCの前に座った後立ち上がれず、2時間ほどTLを見ていたらしい。

シャワーを浴びてからラノベの新刊チェックと注文を行った。前回から1か月以上間が開いたこともあり少し多め。年末帰省した時に買って読む用として、ちょうどその時期に出版される本のうち何冊かはわざと注文しないままにしておいた。楽しみにしているシリーズの続刊があり、生協の開店を待たず入手できるという点でも嬉しい。

いくつか嬉しい新刊について。「黄金の経験値」の書籍版がついに発売されるらしい。イラストが非常に格好いい。副題やあらすじは何というかちょっとテンプレっぽくなっている気もするが、なろうのあらすじにあるような「NPCとフレンド登録する話」ではさすがにパンチが弱いのだろう。自分が読んだときもそこに惹かれたわけではなく、お試しで手を出したら一気に引き込まれたのを覚えている。

kadokawabooks.jp

次に「現代社会で乙女ゲームの悪役令嬢をするのはちょっと大変」4巻。3巻が出てから1年以上経過し、もう続刊はないかと諦めてしまっていたところで新刊情報を見つけ、非常にびっくりした。

over-lap.co.jp

布団に入ってスマホを触っているうち、午前5時くらいに寝落ち。

そういえば、今日は先週参加したDMOJのコンテストの期間が終了する日だった。ここに感想を書いておく。

2022 Bayview Secondary School Programming Contest - DMOJ: Modern Online Judge

P1、P2はよい。P3は値の範囲が大きくても入力の近くだけ見れば解けるやつだなあと思いながら、今回は特に工夫せず解けるためそのまま書いた。P4は問題文を読むのに苦労した。解法は二分探索で、off-by-oneエラーで1WA。

P5は各値について分割方法が何通りあるか独立に数え、掛け合わせる。素因数として2を含む個数を数えればわかるが、その分割方法を求める式を間違えて1WA。P6はAの降順にソートしてdp。P7もAの降順にソートして、優先度付きキューでBを管理した。

P8は揃えるのに必要な操作回数\bmod 3を位置ごとに記録し、遅延セグ木に乗せた。区間内に3種類の値のうちどれが存在するかを持つ。TLの2secギリギリだが一発で通っているのでOK。区間の情報を長さ3の配列で表していたところを3bitで表現し、ビット演算をいろいろ使ったら、0.7secくらいになった。

37分ちょっとで全完し3位。

12/14(水)

午後5時半起床。今日はレポート、セミナー準備、TAの仕事とやるべきことが盛りだくさんである。

最初に日付が変わるまでが期限のレポートに着手したが、Classroomから講義スライドを開こうとしても開けなかった。ファイルが削除されてしまっているらしい。もしかして講義からしばらく経ったら資料を削除するタイプの先生なのかとも考えつつ、恥を忍んで見えないと報告してみたところ、無事再アップロードしてもらえた。

さらにレポートの期限が明日であることも教えてもらった。思いがけず今日やるべきことが一つ消えてラッキー。講義資料が消えており、またClassroomの課題に期限が設定されていなかったので、本当の期限がいつなのか勘違いしていた。ところで、期限が設定されていないので課題のリマインドがなく、この課題は提出に失敗する人が多いだろうなと思う。改めて報告する気力もないので放置。

課題からの解放感によってしばらくYouTubeに時間を吸い取られた。次はTAの仕事。明日発表分の資料、というか本のコピーが上がっていたので、それを見てコメントを加えた。

二面体群は、二次元の物体である二面体を三次元において裏返す対称性も含む。これに対し、三次元の物体を四次元において裏返す例として右手用の手袋を左手にはめる話が挙げられていた。しかし手袋は手を入れる口から裏返せるので四次元にする必要はなさそう。そういえば球を裏返す話を以前TLで見たなと思い出し、「Outside In」という動画を紹介してみた。冷静になると関係があるのかないのかよくわからない。そもそも四次元をイメージできないのでどうしようもない。

www.youtube.com

最後にセミナー準備に取り掛かった。以下のような理由から、今週は昨日と明日で2回セミナーを行うことになっている。

来週のセミナーについても話した。再来週は自分が集中講義のため参加できない。よって来週が年内最後になりそうで、2回行うことになった。今のところ火・木の予定。

週記(2022/12/05-2022/12/11) - kotatsugameの日記

教科書の今読んでいる章は残り補題一つと定理一つで終わるらしいから、そこまで進められればきりが良い。またその残っている定理は証明が5ページあって、やろうとしたら確実にセミナー1回では終わらなさそう。そこで、この定理を飛ばすことにした。

飛ばすといっても、セミナーで扱わないだけで自分は読んでおく必要がある。もしかしたら細かな議論を取り除けば発表できるサイズになるかもと期待しつつ読んでみた。しかしそれだけで3時間以上かかってしまい、要点を絞れるかどうかというより、そもそももう一度取り組むだけの気力が残らなかった。

すでに日付が変わっているが、それからセミナーの原稿を作り始めた。補題の証明をしたらメモが5ページになって、ちょっと足りないかもしれないと思ったので、追加で話すことを探した。火曜日のセミナーで紹介した補題を教科書から探してみたところ、これまで学んだ定理だけで証明できるらしい。ただ明日話すにはちょっと長かったので、その近くに書いてあった、今日扱う定理から示される別の定理について話すことにした。

午前4時過ぎに完成。シャワーを浴びて布団に入った後うっかりハーメルンの更新をチェックしてしまい、就寝は午前6時になった。

12/15(木)

午前9時45分起床。今日は山の上の教室ではなく川内キャンパスだからと余裕をぶっこいていたら、セミナーの開始時間に家を出ることになってしまった。

午後1時までは同級生のセミナー。ラムダ式で原始再帰関数や再帰関数を表現する話で、真偽値、リスト、自然数を定義していた。自分が知っているWikipediaにある定義とは少し違っていて、飲み込むのに時間がかかった。

1要素のリストの表現が2要素以上と異なっていて統一的に扱えない。また自然数がリストの長さとして定義されていて、デクリメントが書きやすいのは良さそうだが、0をデクリメントすると0ではなく変な値が返ってくるのがこれまた扱いづらそう。

昼食を摂り、TA関連で先生についてちょっと図書館に行った後、午後2時から自分のセミナー。5限があるので時間は2時間しかなかった。昨日はもうちょっと長い時間話すことになると思って準備していたが、駆け足で話したら何とか時間内に終えることができた。

今日扱う証明はどういう段階を踏んでいるか分かりやすかったので、発表にもそれを反映し、段階ごとに何が目的かを強調したのがスムーズに進められた理由かもしれない。あるいは単に自分が焦っているのが聞いている側にも伝わっただけか。

教室を移動して5限、TA。今日の発表はちょっと詰まり気味という印象を受けた。内容がこれまでやってきたのと少し違い、発表者本人も本の記述を細部まで理解できているわけではないようで、そこに自分と先生でいろいろ突っ込みを入れた結果、進みは芳しくなかった。

わからないことがあれば事前に質問してほしいと思うが、自分が学生の立場だったとしてわざわざ質問しに行く手間をかけるかというとそうでもないから、しょうがないという気持ちもある。ただの全学の講義なのだから、数学のセミナーらしく本の一字一句を解釈してもらうのは止めたほうがいいのかもと先生も仰っていた。

一方、それを補って余りあるほど熱意は素晴らしい。来週また今日の続きを発表することになって、講義後少し練習しようという話になったが、これがなんと1時間以上続いた。この講義のためにそれほどの努力をしてもらえるということに感動。自分も付き合っていろいろ質問に答えていた。

午後7時を回って解散。学食で夕食を摂り、少し雪がちらつく中原付で帰宅した。吐く息でメガネが曇り、前が見えず大変だった。

シャワーを浴び、昨日後回しにした生命情報システム科学のレポートに着手した。データが与えられるので分析して何か言えという課題。参考としてR言語のライブラリのチュートリアルがリンクされていた。

これまでもレポートにR言語を使うチャンスはあったが、どの回もデータを探してくる部分にドメイン知識が必要で、自分ではどうにもならなかった。今回は最初から与えられているので、それとチュートリアルのコードを組み合わせればすぐ形になりそう、と思っていた。実際無事グラフがいくつか得られたものの、思ったより上手くいっていない様子がある。主成分分析をしたら固有値の値がめちゃくちゃ大きくて、そこから何を言えばいいのかわからなかった。

よくわからないまま適当なことを書き、図表をいくつか貼って完成。午後11時過ぎに提出し、半からCF #838 div.2に出た。

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

Aは最初の状態で条件を満たしていなければ、どれか一要素に操作を連打して偶奇を変えればよい。どの要素を選んでも可能なので、全部試して最小の手数を求める。Bは全部2べきに合わせる。

Cは0と1が隣接する位置を考えると、extensionにおいてそこまでに出現した0と1の個数が等しくなる必要があると分かった。そのような位置でsを切ると、できる部分文字列たちはそれぞれ0のみまたは1のみだから、extensionによって挿入される文字はその逆である必要がある。つまり、s[1,i]をextensionするとき、最後に0と1が隣接する位置までは何を挿入するかが一意に定まってしまう。残りは自由なので、その個数をiを昇順に見ながら数えればよい。

Dは解けず。\gcd(p_1,p_j)を全部聞くとその\maxまたは0p_1になること、2p_1\gt n-1ならp_1=\gcd(p_1,p_j)となるp_jまたはp_1自身が0であること、そうでない場合もp_1の倍数だけ集めて同じ操作を繰り返すことができることを考えた。p_1\ge 2なら操作を繰り返して最悪n+n/2+n/4+\dots\le 2n回のクエリで答えられるが、p_1=1のケースがどうにもならなかった。

Eに進んで、こちらは解けた。まず木に対して辺の重みの決め方は高々一意である。適当に根付き木にして葉から決めていけばわかる。またnが奇数のとき重みの決め方が存在しないことも分かった。重み-1の辺を頂点から見てダブルカウントしたものは必ず偶数だが、奇数をn個、つまり奇数個足すと奇数になってしまう。

辺の重みがどう定まるかよくわからなかったので、根を1とする木dpっぽく求めることにした。部分木の頂点数と、部分木の根に接続した重み-1の辺数の偶奇を持つ。上のほうはケイリーの公式で求め、辺の寄与を求めて足し合わせる。しかしうまくいかない。

そもそもdpがO(n^2)なので望み薄。上だけでなく下、つまり部分木自体もケイリーの公式で求められないか考えてみた。頂点1と頂点nを結ぶパス上にある辺を一つ取り、それを削除した時の連結成分で頂点1が含まれるもののサイズがl、頂点nが含まれるもののサイズがn-lだとする。それぞれの木はケイリーの公式で数え上げられて、辺の張り方はl\times(n-l)通り。

最後に、見ている辺にどんな重みが割り当てられるか考えたい。重み1が割り当てられたとすると、その辺を削除したときにも木全体、あるいはそれぞれの連結成分が条件を満たすことがわかる。つまりlは偶数。重み-1ならlが奇数であることも言えて、逆にlの偶奇から重みがわかるようになった。この辺りは手で実験していたら思いついた。

問題文中にケイリーの公式がわざわざ書いてあって面白い。その公式を知っているか問う問題にはしたくなかったのだろう。実際、辺の重みに関する考察がまた別途に必要であった。

Fを見て解けず、Dに戻ってしばらく考えていたらコンテスト終了。4完63位。ひどすぎる。

Dのupsolveをした。三つ要素を取り出したとき、そのうち一つを候補から外せるようだ。0が含まれていないなら何でもよい。三つが(0,x,y)(ただしx\lt y)という組だった時、3通りのクエリの答えがx,y,\gcd(x,y)となる。x,\gcd(x,y)\lt yということをチェックすればうまく(0,y)を残すことができる。コンテスト中はクエリ回数制限の2nn+nだと思っていたが、この解法は2+2+\dots+2と見ている。そういう意識の切り替えが一切できなかった。

しばらくネット小説の更新分を読んだ後、午前8時まで日記を書いていた。布団に入り、ハーメルンを開いて1作読了。

syosetu.org

「音楽チートで世に絶望していたTS少女がSIDEROSの強火追っかけになる話」。主人公のチートっぷりが非常に良かった。ネットで配信者として活動する主人公というのは何作品も漁ってきたが、クリエイターとして活動する主人公というのも気になる設定だなと感じている。最近記憶に残っているものだと、「Vのガワの裏ガワ」は主人公が自他共に認める神絵師で、これも良いなあと思っていた。しかし探してもあまり見つからないのが残念。

午前9時就寝。

12/16(金)

起きたら午後2時だった。ちょうど1on1の時間である。飛び起きて会議に接続した。

振られていたタスクはなく、また新しく発生することもなかったようで、今日はペアプログラミングになった。細かい計算がある部分だったので、自分でも紙に書きながらコーディング風景を眺めていた。結局特に指摘するような間違いも起こらず、うまく動くのを確認して解散。1時間半ほどだった。相手の画面を見ていただけと言えばそうではあるが、ちゃんとダブルチェックのように確認していたので貢献したという感触はある。

1時間ほどしたらサークルが始まるが、眠いので今日は休むことにし、布団に戻って二度寝した。

午後8時頃目覚ましで覚醒。yukicoderがあると思っていたらないらしい。三度寝はせず、ずっと横たわってハーメルンを読んでいた。午後11時頃布団から脱出し、半からECR140に出た。

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

Aはxまたはyがdistinctならよい。Bはa_2,\dots,a_nの間で操作しても値が均されるだけで嬉しくない。よってそれらの数を小さいほうから順に使っていく。a_iによってa_1\rightarrow\max(a_1,\lceil(a_1+a_i)/2\rceil)とできる。

Cはdp。今見ている位置にある文字と異なる文字が直近でどこに出現したかを持つO(n^2)状態で、遷移もよく見ると全体でO(n^2)だった。遷移がvalidであるかのチェックも前計算によって定数時間で行えるが、それをしなくても通る制約で嬉しい。

Dはトーナメントの段階ごとに勝ち上がることのできるスキルレベルの区間を計算。出力以外O(n)でびっくり。最大値と最小値だけ出力させるマルチテストケースにしなかったのはなぜだろう。答えが区間になることを見抜く問題だったのか。

Eはc_ic_{i+1}のどちらかをアクティベートしなければならない、という条件たちになる。つまり重み付き最小点被覆で、半分全列挙で解けた。条件をbitで表現しておくとn=m/2としてO(n)でチェックが行える。対になる値の取得はゼータ変換っぽい何かになり、全体でO(n2^n)となった。

Fは解けず。値がほぼdistinctな場合、二つの部分木に同じ値が含まれるか調べる必要があって、それすらできなかった。時間いっぱい取り組むことすらせず逃亡しハーメルンを読んでいた。結果は5完5位。FはO(n^{7/4})という話を聞いた。すごい計算量だ。

布団に戻ってさらにハーメルンを読み続け、午前8時頃1作読了。「闇の正義スパンダム」。

syosetu.org

最近ランキング上位に載っているし、タグに「主人公最強」とあることで気にはなっていたが、スパンダムというキャラに良い印象がなく避けていた。しかし読んでみると非常に面白かった。ハリポタ原作でギルデロイ・ロックハート主人公の「私は誰でしょう?」しかり、わざとそういうキャラをメインに据えることによる目新しさ、そこから生まれる面白さというのは確実にあるようだ。

もちろん原作通りのふるまいをしているようではまた悪印象を抱かれるから、そうではない。この作品のスパンダムはとにかく最強で、またストイックだった。そういうぶれない主人公が好き。話も少年期からスタートしたのに中弛みなどなく、間をポンポン飛ばした後原作でルフィと関わる部分を描いてそのまま完結した。まあもう少し読んでいたいという気持ちはある。

それから少し他作品の更新を読んで、午前9時くらいに寝落ち。

12/17(土)

午後3時過ぎに生協の冷凍弁当を受け取り、1時間半ほどハーメルンを読んでまた寝た。

午後7時半起床。食事してシャワーを浴び、午後9時からABC282に出た。

HHKB Programming Contest 2022 Winter(AtCoder Beginner Contest 282) - AtCoder

A、Bはよい。Cは1文字ずつ見て、今括られた文字を見ているかそうでないかのフラグを切り替えていった。

Dはちょっと面倒。連結成分を一つずつ見て、二部グラフでないものが見つかったら即座に0を出力、そうでない場合はN(N-1)/2-Mから、連結成分内で同じグループに属する点をペアにする場合の数を引く。このとき引いたものだけが追加したときに二部グラフ性を失う辺の候補で、当然入力の辺を含むこともない。よって残りが答えになる。

Eはちょっと悩んだ。操作した要素を辺で結んでみると、どうやら木になるらしい。逆にどんな木にも対応する操作が存在する。辺のコストは全部前計算できるから、最大全域木を求める問題になった。

FはSparse Tableを作れと書いてある。いまいち自信がないので自分のライブラリを探しに行ったら、Disjoint Sparse Tableしかなかった。それを頑張って写したら何とか一発で通ったが、結構面倒だった。

Gは挿入dp。インデックスと類似度とABそれぞれの末尾の値を持つと状態数がO(N^3K)で、遷移が苦しい。よく見たら二次元累積和で書ける形で、本当にこれが想定なのかと疑いながら実装したら通った。P素数であることは使っていない。

Exに1時間残したものの解けなかった。Bの累積和を取ってC_i=B_1+\dots+B_iとする。rを固定し、\min\{A_l,\dots,A_r\}+C_r-C_{l-1}\le Sとなる1\le l\le rを数えたい。式変形するとC_r\le S+C_{l-1}-\min\{A_l,\dots,A_r\}となるので、右辺をデータ構造で持つことにした。

\minの項が等しいl区間を管理すると、その区間が変化するとき対応するlに対して値が少し変わる。これが更新クエリで、取得クエリはC_r以上の値を数えるというものになる。後者だけならrangefreqだが更新ができない。そこで平方分割することにした。かなりバグらせつつ何とか実装したものの、TLEしてしまい、3secを切ることすらできずそのままコンテスト終了。

7完41位。Exは分割統治らしい。最小値で切って、短いほうだけ見ればO(N(\log N)^2)になる。見たことがあるはずなのに解けず、悔しい。

No.1496 不思議な数え上げ - yukicoder

コードゴルフ。C問題まで手を付けたがどれも最短を取れておらず、今回はダメダメだった。日曜日までちらほら更新があったため、それも含めて記録しておく。

Aはdc 18B→Perl 17B→Raku 16Bと更新されていて、dcだけが自分。PerlA..Zというリストから必要な部分を切り出す方法だけ試していて、そもそも終端をZ固定ではなく入力から作るということに思い至らなかった。しかもそこで諦めてしまい、Rakuで文字コードのリストから文字列を作る関数chrsがあることを思い出せなかった。これがコードゴルフで出てくるのは初めてではないのに。

chrs | Raku Documentation

BはPerlでボロ負け。文字列のビット演算を使う。

Cは非常に面白い。1文字ずつ見るのはやめて、括られた文字を一気に読むような正規表現で短くなるらしい。それは間に"を含まない文字列という意味での/"[^"]*"/とか、あるいは最短マッチが書けるPerlなら/".*?"/でもよい。

この正規表現/,/のORでマッチさせると、括られた文字に含まれる,はダブルクオーテーションを含めまとめてマッチするので、その文字列が1文字かどうかなどで場合分けすることで括られた文字でない,だけが見つかる。アスキーコードの妙で、マッチした文字列に'"'をbitwise ORすれば、,1文字のケースのみが.に変化するようだ。

atcoder.jp

午後11時半からCF combinedに出た。ハンドルネームか知らないが問題文中の人名がやたら長くてちょっと読みにくかった。

Dashboard - Polynomial Round 2022 (Div. 1 + Div. 2, Rated, Prizes!) - Codeforces

Aは1の前の演算子を交互に切り替える。

Bは、できるだけ同じ要素で埋めようとすると周期kになるので、\lfloor n/k\rfloor+1回出現する要素がn\bmod k個、\lfloor n/k\rfloor回出現する要素がk-(n\bmod k)個となる。aの最大値が\lfloor n/k\rfloor+1を超えないことと、ちょうど\lfloor n/k\rfloor+1になる要素がn\bmod k個以下であることをチェックすればよい。

Cは昨日のECR-Dと同じに見えてトーナメントでないから結構違う……かと思ったら解法はそれなりに似ていた。可能な最大値と最小値を求める。結論だけ言えば、sの使用するprefixについて、末尾から一致している文字の数を数え、人数から引けば答えになる。

Dはちょっと詰まった。1の個数を調べ、とりあえず達成不可能なケースをはじいておく。あとは1が不足している行に余っている行から移すのを繰り返すだけで揃えられれば明らかに最短手数。では、それは本当に可能だろうか?冷静になると当然可能で、なぜなら足りない行において0、多い行において1となる列はどんな場合でも必ず存在するから。操作の順序もなんでもよいことが分かったので、あとは頑張って実装。

Eは木dp。二つの駒のうち片方しか訪れなくてよい部分木があったら、もう一方の駒は上のほうで待っていることになる。このとき距離d以上開けないよう適切な位置まで下りてくることになる。dfs 1回で書けると思うが、ちょっと混乱してしまったため2回使って丁寧に書いた。

F1。体力に対し豚が何匹いるかを記録する列を管理する。操作1は特定の位置をインクリメントすればよい。操作2は全体をずらせばよい。操作3は、「これまでずらした量」だけずらした列を現在の列に重ねることになる。これをうまく表現したい。

列を実際にずらす代わりに、「どれだけずらされているか」という値dを持っておく。また「これまでずらした量」Dも持っておく。自分の方針ではd=Dとは限らない。まず、操作1では体力x+dの豚を追加することになり、操作2ではd\leftarrow d+xD\leftarrow D+xとすることになる。

操作3だけは真面目に行うことにする。Dだけずらした列を重ねられれば良い。D=0の時は全体に2掛けることになるので、特別に記録しておく。D\lt 2\times 10^5のときは愚直に計算し、D\leftarrow 2Dとする。ここでd\ne Dとなる。Dの値は指数関数的に増えていくのでこの操作はあまり行われない。D\ge 2\times 10^5のときは何もしなくてよい。

列をmapで管理したら通ったが、そのままF2にも投げたらMLEで落ちてしまった。操作3をもうちょっと簡略化してみる。この先使うDからいくつか選んで体力から引き、最終的にずらされた状態でも体力が残っているようにする方法の数だと考えられる。

Dは常に倍々以上に増えていくため、ある位置のDが選べるなら、その代わりにそれより前のDたちをどのようにでも選べる。このような制約下での数え上げは、大きな方から貪欲に取った場合を2進数だと思うことで求まる。

残り時間はGに取り組んで、解けず。包除原理で書き換えると答えが[-1,1]区間に収まるようになった気がするが、答えが愚直と全然合わなかった。

コンテスト後に順位表を見たら、Gがそれほど解かれていないのに順位がかなり下がっていてびっくりした。どうやらBのpretestが弱かったらしく、大量Hackで上位に躍り出た人がたくさんいる。システスは全部通って47位、レートは2732→2773(+41)。自分の部屋でBを落とした人が11人いて、これらをHackすることができていれば1ページ目に入っただろうと思うと残念。しかし本当にGが解けそうだったのだ。

システスを見届けてから日記を書き始めたが、朝方集中力が切れてラノベに手を出した。1冊読了。

VTuberなんだが配信切り忘れたら伝説になってた」5巻。読んでいる自分のその時の気分でシリーズの評価が結構ばらけるが、内容は1巻から相も変わらずバカ騒ぎ。今日はこういうものが楽しめる気分だったので面白く読めた。次巻への引きに興味を惹かれたものの、これもまた圧倒的なネタの洪水に飲み込まれるのだろう。

別の本を開いてしばらく読み、正午就寝。

12/18(日)

午後7時起床。非常に嬉しいツイートがエゴサーチに引っかかった。

「Vのガワの裏ガワ」は本当に面白かったのでおススメ。それはそうと、自分の書いた文章が人の意思決定に影響を及ぼしたことが嬉しい。読んだ本やネット小説の感想を日記に書くのはもはや惰性で続けていることだが、なんだか報われた気がした。と言っておいて、実は「非常に面白かった」と書いてあれば絶賛していると思ってもらって間違いないので、細かい感想まで読まれてはいないかもしれない。それでも嬉しさには変わりない。

しばらく日記を書いた後、昨日読み始めた本をまた開いた。そのまま読了。

「ケーキ王子の名推理」6巻。非常に面白かった。5巻が出たのが2年以上前ということで、日記に書くのはシリーズ6冊目にして初めてらしい。最初は日常の謎っぽい推理がメインだった記憶があるが、今は主人公や周囲のキャラたちの、恋の話がメインになっている。それが面白いのだ。ハッピーな話も一筋縄ではいかない展開を辿るし、ビターな話もその中に確かな幸福があって、かなり感傷的になれる。

ラストは短い間に展開が二転三転して気持ちの乱高下を味わった。その締めくくりがまたなんとも言えず悲しさと嬉しさが混じりあったもので、読後感が良い。ネタバレしないようにしたら曖昧なことしか言えなかったが、とにかく面白かった。

午後11時半からCF #839 div.3。今の本を読み終わったのがちょうどコンテスト直前だった。

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

Aはよい。Bは4通り試す。手数を答える問題ではないので回転方向に気を使わなくてもよい。Cはちょっと面倒だった。階差数列を取って、suffixの短いほうからインクリメントするのを和がn-1になるまで繰り返した。

Dは隣接項の関係に注目。a_i=a_{i+1}なら何でもOK。a_i\lt a_{i+1}ならx\le\lfloor(a_i+a_{i+1})/2\rfloora_i\gt a_{i+1}ならx\ge\lceil(a_i+a_{i+1})/2\rceilが必要。

Eは自分が変えなければならない要素すべてに青を塗るまでの手数が問題。先手・後手しか塗らなくてよい要素、どちらにとっても塗る必要のある要素をそれぞれ数えて判定する。自分しか塗らなくてよい要素を先に塗って、最後に「どちらにとっても塗る必要のある要素」が残ったら引き分けとなる。

Fは、一度変化したセルは二度と変化しないし、その周囲のセルは一度も変化しない。なので変化したセルについて変化前・変化後が完全に区別できるから、どの盤面がどの盤面より前に来るかわかる。この条件でDAGを作り、トポロジカルソートして、操作の復元を頑張ればよい。

G。aがソート済みとして、a_i\leftarrow a_i-i(ただし0-indexed)、さらに累積maxを取る。レートがxの状態からn回戦うと、a_i\le nなる対戦相手には勝ち、そうでない相手には負ける。これで一周のシミュレートを高速に行えるようになった。a_i\le nとなる対戦相手が一人以上増えるまで、あるいは一周の途中でレートyを達成できるようになるまで何周か一気に進めるのを繰り返し、最後に端数を足せばよい。

1時間ちょっとで全完して8位。

しばらく日記を書き、午前4時前に布団に入った。明日は1限から対面で集中講義に出る必要がある。わかっているのになかなか眠れず、しばらくハーメルンを眺めていた。午前4時半就寝。

週記(2022/12/05-2022/12/11)

12/05(月)

午後4時半前に起床。

先週水曜日に出たDMOJのコンテストの期間が終了していた。順位表での並びは全完した6人中4人目になっている。どういう順序か知らないが十中八九速度順だろう。3問目で手間取ったのが痛かったか、あるいはそれどころではない差がついているのか。いずれにせよ、勝てるかなと期待していたのでちょっと悔しい。

COCI '22 Contest 1 Unofficial Mirror - DMOJ: Modern Online Judge

起きてすぐインターン先定例会。先週金曜日の1on1の時点で何も用意できていなかった状況は今も変わらない。今週は何かやりますと言って終了した。実は1on1のときにタスクが変更されていて、少し手を付けやすくなった感じがするから、さすがに何かしら進められるだろうという見込みがある。

今週の勉強会は、先週から言っていたように自分の発表。内容はアスキーアートQuineについて。午後5時半から1時間発表、1時間質疑応答だった。何かコメントを頂いたら同じくらい喋りたくなってしまい、結果質疑応答にこうも時間がかかった。

いつものようにスライドを公開しておく。

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

ABC279の賞品が届いていた。学生3位に全体での賞も合わせ、アマギフ6万円ぶん。これで貯め込んだ残高が50万円を突破した。賞金付きABCが多くて本当にありがたい。

Gまでの7完最速で9位。上に日本人学生が少なかったので賞金額が思ったより高そう。

週記(2022/11/21-2022/11/27) - kotatsugameの日記

それから週記を書いて午後10時前に投稿。校閲ができていない状態がもはやいつものことになってしまっている。その後すぐTROC #29に出た。もともとAGCと被っていたのがギリギリになって1日ずれた。

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

Aはよい。

Bはどの順番で回っても偶奇が一意になるタイプの問題だと思ったがWA。ちゃんと考察すると、X_i\bmod 2Y_i\bmod 2が一致するか異なるかでグループ分けしたとき、各グループが空でないことが必要十分条件になっていた。グループ内の移動は距離の和の偶奇を変えないため。

Cは手でいくつか試すと、一要素に\pm 2したり全要素に\pm 1したりがコスト0で行えるので、最後にコスト1の操作で高々1回調整するだけになる。

Dは2べきから1引いた数に揃えたい。よって2^k\le Nなる最大のkを取り、2^k,2^k+1,\dots,N2^k-1,2^k-2,\dotsと対応付けた後、残った数の最大値を新たにNとして計算するのが良い。オーバーフローで1WA。

Eは面白かった。直感として最大値Mとそれ以外に分けたくなって、このとき達成される値がM+1以上。さて、特に制限なくグループ分けしてC_1C_2ができ、C_1+C_2\gt M+1となったとしよう。一般性を失わずC_1\gt (M+1)/2としてよい。

最初のグループに割り当てられた数はすべてC_1の倍数だが、2C_1\gt Mよりそのような数でM以下のものはC_1ただ一つしかない。さらにAの要素が相異なるという条件から、最初のグループに割り当てられた数がそのC_1ちょうど一つだけだったことがわかる。あとはそれを全探索すれば解ける。

Fはよくわからない。できるだけ大きな素因数で割れば操作回数は多くなるが、その分相手も多く操作できるようになってしまう。そこで、相手が操作できないピースは大きな素因数で、操作できるピースは小さな素因数で割ることにして、メモ化再帰でそれっぽく操作回数を数え、比較してみた。出したら通ってびっくり。

Gは頂点1を含まないグループのサイズに対して分け方が高々一意。うまく分けられるサイズを木dpとマージテクで列挙した。各サイズに対し、そのグループをこれまでいくつ作ったかもカウントしておく。部分木のサイズをsとし、その約数dについて、サイズdのグループをこれまでs/d-1個作れていれば新たにもう一個作れる。それより多いことはなく、少なければ破綻しているので削除。TL 3secのところ2.3secで通った。

Hは気合い。i\rightarrow P_iという順で並べたサイクルを極大な単調減少列に分解し、それぞれの長さを2で割って切り捨てた値の和が答えになる。各単調減少列を区間を管理する要領で持てば1点更新にも対応できる。サイクルを切り開いて持つので端の処理が大変なことになりそうだったが、切り開いた後3倍にして真ん中の部分だけ見ることで解決した。

全完7位で2762→2786(+24)、highest。Fの解説には全然違うことが書いてあった。Gはグループのサイズdを決め打つと、部分木のサイズがその倍数であるような頂点が、根以外に\lceil N/d\rceil-1=\lfloor(N-1)/d\rfloor個あればよいらしい。

レートのランキングで5位になった。

Advent Calendar Contestの5問目を通した。色のほうでカードをまとめていくつか場合分けする。こういうタイプの問題が一発で通せたのはうれしい。

#822812 (C++14) No.2148 ひとりUNO - yukicoder

セミナー準備を始めた。先週準備したぶんの続きからだが、軽めの定理を一つ示すともうその章は終わり。その後次の章に進むのではなく、floor_sumを解説する準備を始めた。ピックの定理と競プロの関連でこういう方法があるというのを先生にお話ししてみたら、興味を持たれたらしく、次回のセミナーで話すよう言われていた。

どちらの内容も準備はすぐできて、午前2時に終了。しばらくYouTubeを見た後シャワーを浴び、ゴミを出して午前4時に布団に入った。そこからハーメルンを読んで午前5時半就寝。

12/06(火)

午前9時40分くらいに起きた。

TLに雪というワードが流れてきて一気に目が覚めた。窓の外を見ると、確かに多少降っている。ただ天気予報によれば朝のうちに止むようだし、積もっているというわけでもなかったので、今日も原付で山に登った。

午前10時を少し過ぎたあたりで教室に到着。今日も遅刻してしまったなと思っていたら、先生も少し遅れていたらしい。待つ間に生協に走ってパンを買い、腹ごしらえをした。

午前10時半からセミナー開始。最初2時間は同級生の発表だった。ここ2週間ほど議論の不備が指摘されて示せていなかった命題が、帰納法の仮定を強めることでヌルっと示せてびっくりした。

それから1時間は昼休み。生協で買ったパンやおにぎりを食べた後はハーメルンを読んでいた。

その後自分の発表。教科書の準備してきた部分は1時間半ほどで話し終わり、まだ時間に余裕があったのでfloor_sumを解説していた。式変形については納得してもらえたものと思うが、計算量を解析して高速化になっていることを確かめる部分は微妙そうだった。手で計算しようとすると繰り返しが少ない分変形が面倒になっているので、理論的な説明をするしかなく、本当に速いということを実感してもらうのは難しい。

終わったのが午後4時で、それから揃って建物を移動し講演会に出席した。行列式点過程とやらの話。詳しい説明はされなかったので結局よくわからないままだが、グラフの全域木にも何か関係があるらしい。行列式と全域木と言えば行列木定理で、ちょっと聞いてみたところ見事にそれ由来だった。行列式で書けるから数え上げられるというだけでなく、このように派生することもあるのかとびっくりした。

終了後、同級生と先生と学食で食事しつつ、講演会で言及された定理について話していた。N\times Nの行列Lについて、|L+E|=\sum_{X\subseteq\{1,\dots,N\}}|L_X|というもの。ここでL_XとはLからXに属する行・列のみを取り出した行列で、|L_{\emptyset}|=1とする。

行列式の定義から式変形したら、特別な定理なしに示すことができた。クロネッカーのデルタを用いると(L+E)_{i,j}=L_{i,j}+\delta_{i,j}と書けるので、|L+E|=\sum_{\sigma}{\rm sgn}(\sigma)\prod_{i=1}^N(L_{i,\sigma_i}+\delta_{i,\sigma_i})となる。ここで\sigmaは長さNの順列全体を渡る。

積を分解すると\prod_{i=1}^N(L_{i,\sigma_i}+\delta_{i,\sigma_i})=\sum_{X\subseteq\{1,\dots,N\}}\left(\prod_{i\in X}L_{i,\sigma_i}\prod_{i\notin X}\delta_{i,\sigma_i}\right)となる。ここで二つの\sumを入れ替え、\prod_{i\notin X}\delta_{i,\sigma_i}=1なるケースのみを考えることで、|L+E|=\sum_{X\subseteq\{1,\dots,N\}}\sum_{\sigma\;s.t.\;\forall i\notin X.\sigma_i=i}{\rm sgn}(\sigma)\prod_{i\in X}L_{i,\sigma_i}と書ける。

内側の\sigmaX以外の添え字で値が変わらないので、Xの順列だと思ってもよい。このとき{\rm sgn}(\sigma)が変化しないことが確かめられる。したがってX=\emptysetの場合も含め\sum_{\sigma\;s.t.\;\forall i\notin X.\sigma_i=i}{\rm sgn}(\sigma)\prod_{i\in X}L_{i,\sigma_i}=|L_X|と書ける。証明終。

和の取り方を入れ替えたり、{\rm sgn}(\sigma)の議論で転倒数を考えたりと競プロチックで楽しかった。特に前者については、セミナーにおけるfloor_sumの説明でも使ったテクニックなので、良いタイミングだったなと感じた。

来週のセミナーについても話した。再来週は自分が集中講義のため参加できない。よって来週が年内最後になりそうで、2回行うことになった。今のところ火・木の予定。

解散して午後8時前に帰宅。ちょうどJOI一次予選(第3回)の問題が公開されたので急いで解いた。

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

AはdcでもVimでも4Bで、30秒ほど負け。Bは\left\lfloor\sqrt{\lfloor 30/(A+7B)\rfloor}\right\rfloorを出力したら通った。Cはsed。DはOctaveで自分より小さな値を数えた。今のところA以外の最短を取れている。

午後9時に再度外出し、ゲーセンに向かった。チュウニズムのグッズキャンペーン用のポイントを稼ぎに行く。

チュウニズムのグッズキャンペーン的には12/07までにあと13回プレイする必要がある。

週記(2022/11/28-2022/12/04) - kotatsugameの日記

ゲーセンに到着した時点で閉店まで2時間ほどしかなかったため、理論値を狙いつつ大量に捨てゲーして無理やり間に合わせた。結果的に今日は15クレプレイできた。一方理論値は一つしか出ていない。手元動画を八つほど撮った。以下のリプライツリーに連なっている。

立ち食いそばを食べ日付が変わったあたりで帰宅。動画をツイートした後は疲れ果てて長い間YouTubeを眺めていた。

シャワーを浴びて布団に入り、ハーメルンを読んだ。1作読了。「めしくい・ざ・ろっく!」。半同棲の設定が良い。主人公は単なるぼっちではないらしく、その点について自己評価と他者からの見られ方に結構違いがあるのも良かった。「ひとり」や「ふたり」を人名だと認識するのが少し難しかった。

syosetu.org

午前6時前に就寝。

12/07(水)

午後5時に目を覚ました。ちょうどCFで5hが始まる時間だったが、今日が提出期限のレポートがあるため見送った。そのレポートのため布団で講義資料を読んでいたら、午後7時前に寝落ちしたらしい。

起きたら午後9時半になっていた。布団から脱出してレポートに取り掛かる。生命情報システム科学の課題で、これまで2回ほど提出したが毎回非常に苦しみながら捻り出している。そのくせ単位を取得しても修了要件には含められないらしい。そういう理由からやる気が全然出なくて、1時間ほどYouTubeを見てしまった。

それから一念発起してそれっぽいものを生成しはじめたら、無事日付が変わる前に提出できた。今回も出来は悪い。

解放感を感じつつハーメルンを読んでいた。午前3時に1作読了。

syosetu.org

「TS逆行したら才能に満ち溢れてた」。逆行転生して配信者になる話で、まず設定が好き。展開も非常に順調で良かった。

1点、4歳でIMO代表になるという話において「前世で博士課程後期だったからこのくらいは」みたいなことが書かれていたのが気になる。数オリと博士課程後期、それも物理だと能力的に全くの無関係に見えるし、「数オリ専用の知識が必要」と書いてあるのでそのことは作者もわかっているものと思う。主人公は前世から非常に頭が良かったらしいので、そう書いておくだけで良かったのではと考えてしまう。

別の講義のスライドを読み始めた。スライド中にいくつか問題があって、それらから三つ選んで年度末にレポートとして提出するタイプ。この講義の単位はちゃんと修了要件に含められるためしっかり取っておきたくて、さすがにそろそろ手を付けないとまずいと考えたのだ。序盤は内容も問題も簡単だったので、とりあえず二つ解いてレポートも作っておいた。こうも簡単だと本当に三つでよいのか気になるところ。

スライド中の式番号を参照する部分がうまくいっていないものがあり、少し読むのに苦労した。多分TeXを1回しかコンパイルしていないのだろう。これに関して以下のようなツイートをしたが、RT先で2回どころか何回コンパイルしても出力が一定にならない例について話されていて面白かった。

また、それに並行してICPCのチーム紹介ドキュメントの仕上げをしていた。アスキーアートQuineにいろいろ意味のある文字列を埋め込んで完成させた後、チームメイトやコーチに確認を取り、午前9時頃に提出した。

午前10時からまたハーメルンを読んでいた。1作読了。「サイコバグなお兄ちゃん、Vtuberになる。」。主人公がハイスペックで楽しい。特に悪いことをしたわけでもないのにタイミング等の関係でデビューと同時に大炎上するという展開は何作か読んだことがあるが、これはひとまずの終息までがかなり速く、ストレスを感じるシーンがすぐ終わってくれた。

syosetu.org

午後2時就寝。

12/08(木)

目を覚ましたら午後8時だった。先週の日記にも書いたように、今週はTAをしている講義が休講になる代わりに大学院の何かのオンライン説明会があった。それに盛大に寝坊してしまったらしい。どうしようもないので綺麗さっぱり忘れることにした。

布団でずっとカクヨムを読んでいた。4か月ほどページを開いておらず更新がかなり溜まっていたため、今日はそのうち「Vtuberってめんどくせえ!」を読み進めていた。

kakuyomu.jp

午前1時頃寝落ち。

12/09(金)

午前5時半起床。またカクヨムを開き、今日は昨日読んでいたものの短編集と「自作3Dモデルの素材を宣伝するためにVtuberになったら予想外に人気出てしまった」を読み進めた。

kakuyomu.jp

それぞれ最新話にたどり着いたところで布団から脱出した。

シャワーを浴びて午前11時過ぎに外出。原付への給油、昼食、散髪を済ませて午後1時頃帰宅し、またシャワーを浴びた。いくら頭を洗ってもらったところで首筋の細かい髪の毛は取れず、ずっとチクチクするのが耐えられない。

少しコーディングして午後2時から1on1。書いたものを説明していたらまたしてもバグりまくっているのに気付いたので、今日もいろいろ確認を取りながら書き直すペアプログラミングになった。

それが一段落した後はこれからのタスクについて。現状自分に任せるものがないらしい。ちょうど自分も来週はセミナー2回、再来週は集中講義と立て込んでいるので、少しの間インターン関連では何もしないことになった。来週の1on1の日程だけ決めて解散。1時間程度で終了した。

しばらく講義スライドを読んだ後、午後4時半前にまた外出。午後4時40分から大学でサークルバチャに参加した。

https://kenkoooo.com/atcoder/#/contest/show/739fe3f0-29f9-458b-a358-5daafacc649e

5問目まではよい。6問目は、最近あった模擬地区予選2022Lに関して見聞きした話を思い出すと、木の中心から同じ距離にある頂点しか同じ色で塗れないことがわかる。またそれは実際に達成可能。実装上は各頂点・各辺を中心だと思って計算し、最小値を求めることで、中心を具体的に求める必要がなくなる。

7問目は解いたことのない問題だった。A_i\lt A_jなる(i,j)を固定し、各(x,y)について2^Q通りの操作のうちいくつで(i,j)\rightarrow(x,y)になるかdpで求めればとりあえず解ける。当然間に合わないので一旦この方針から離れ、操作によって変化する転倒数を考えていたが、うまくいかない。元の方針に戻ってきたら、このdpが全(i,j)に対して同時に行え、かつ操作1回に対する更新がO(N)で書けることに気づいた。そのままAC。

30分くらい余ったので解説チェックをしていた。その後感想戦。6問目で具体的に中心を求めなくても間に合うのは温情かと思っていたが、求めたとしてもそれに接続する辺を見るケースで結局候補がO(N)通りになるため、計算量的にはどちらも変わらないらしい。しかも、そもそもN\le 100は葉の数がオーバーフローしないための制約だった。\bmodを取ると最小値が分からなくなってしまう。

午後7時に解散し、学食で夕食を摂って帰宅。YouTubeを開いたら「科学の力使いまくって隠居生活」が投稿されていたので視聴した。

www.youtube.com

そのまましばらくYouTubeを見ていたら午後9時。yukicoderのコンテスト開始を待ちながらAdvent Calendar Contestの7、9問目を通した。単なるdpとbit dpですぐ解けた。

午後9時20分からyukicoder 371に出た。星は多めだがコンテスト情報にある想定diffは低めでよくわからない。

yukicoder contest 371 (Asakatsu Presents) - yukicoder

Aはよい。Bはimos法で、区間の向きが逆なことに注意。Cは毎回作れる色を全部持ってよい。Dは組み合わせ的な計算をしたくなるが実はdpが行列累乗で書ける。

Eは答えを二分探索して、判定はO(NM)。TLが6secなので十分間に合いはするが、入力サイズも大きいしなかなか攻めているなと思った。解説曰く判定に\logを付ける解法を落としたかったらしい。

Fは、「各グループでこれまで出題されたことのある問題数」だけわかっていれば直近K日の出題状況も計算できて、その日あり得るセットとその確率がわかる。よってそれを状態としてメモ化再帰すればよい。状態数が\prod_i(P_i+1)通りで遷移にO(N2^N)かかるが、制約が小さいため十分間に合う。

\sum_i t_i\gt 60となるケースは絶対に全完できないので先に弾いておく。それ以外のケースはいつか必ず全完できる。

30分で全完して優勝。Fみたいな問題はほとんど見ないので、星4と言われても青diffと言われてもそうなのかと思える。そういう意味では難易度調整には成功していそう。

余った時間でDMOJの1900↓ratedのコンテストに参加した。終了が来週なので、ここには特に感想など書けない。

2022 Bayview Secondary School Programming Contest - DMOJ: Modern Online Judge

9月末にホスフィンとたいぺーと飲酒したときの余りを飲みながら、しばらくYouTubeやTLを眺めていた。

午前2時からは日記を書いていた。下書き保存ではなくうっかり投稿してしまったりしつつ、午前4時前に切り上げて布団へ。

少しだけハーメルンを読んだ。「転生チートオリ主が芋ジャージ女を養うまで」を読了。タイトル通り主人公が転生チート持ちなので面白そう。まだ3話までしか連載されていないので、これ以上特に言えることはない。

syosetu.org

午前4時半ごろ寝落ち。

12/10(土)

午前10時起床。準備して半からHTTF2023本選のオープンコンテストに出た。

HACK TO THE FUTURE 2023 Final (Open Contest) - AtCoder

出たといってもコードゴルフだけ。しばらく日記を書いた後布団に入り、少しハーメルンを読んで正午くらいにまた寝た。

午後3時から1時間おきに目覚ましで起きていたものの、冷凍弁当の受け取りに失敗した。午後5時に起きたとき不在着信があったのに気づいて分かった。インターホンの履歴を確認するとどうやら午後4時ちょうどに鳴らされたらしい。もしかしたら目覚ましの音で聞こえなかったのかもしれない。こちらから電話をかけなおし、週明け月曜日の夕方に届けてもらうことになった。

しばらくハーメルンを読んでいた。「出世レースに負けた私が殺戮サークルの姫になるまで」読了。主人公最強なのは当然良いとして、周りのキャラも個性的で好ましい。掛け合いが面白い。

syosetu.org

午後6時半からまた2時間ほど寝ていた。起きたらHTTFが終了していた。無事最短コードを取れたらしい。

冷凍弁当はないためカロリーメイトを食べ、午後9時からABC281に出た。

AtCoder Beginner Contest 281 - AtCoder

Aは降順のrangeを生成する問題で、Rakuの...という演算子が使える。逆に自分の知る限り、これ以外のどの言語・どの方法でも、昇順のrangeをreverseするか公差に-1を指定する必要がある。ところが終点を1にしたり文字列のrangeを作ったりで2WA。

https://docs.raku.org/language/operators#infix_...

Bはsed。2文字目が0になるのを許してしまい1WA。CはT\leftarrow T\bmod{\sum A}として計算。Dはdp。

Eはsetを二つ持ち、値を追加したり削除したりするたびにset間で要素を移動させて、片方の中身が必ず下位K個になるようにした。うっかり上位K個を求めるコードを書いてしまったので値に負号をつけて対応した。

Fは上位bitから見て値を分類しながら再帰的に解く。binary trie木っぽいが実際に木を作る必要はない。

Gもdp。頂点1から近い順に距離を確定させていく。同じ距離にある頂点をまとめて決めるので、遷移はO(N)。それより1小さい距離にある頂点がいくつあるかわかれば遷移の係数が求まるから、dpの状態はその数とこれまでいくつ距離を確定させたかでO(N^2)となり、間に合う。任意modなので二項係数は漸化式で求めておく。

Exはとりあえずdpを書いて形式的べき級数に言い換えた。i\ge 2についてdp_i=[x^i]\left(\left(\sum_{j=1}^N\binom A j x^j\right)\prod_{j=2}^{i-1}(1+dp_j x)\right)となる。この後きっと何かすごいことをするんだと思い諦めてBのコードゴルフを始めてしまったが、戻ってきたら解けた。

F_i=\left(\sum_{j=1}^N\binom A j x^j\right)\prod_{j=2}^{i-1}(1+dp_j x)と置き、更新F_{i+1}=F_i\times(1+dp_i x)を平方分割してみた。F_i=f_ig_iと分けて管理する。f_2=\sum_{j=1}^N\binom A j x^jg_2=1であり、更新はgのほうに1次式を掛ける。このときgの次数が適当なしきい値Wを超えたら(f,g)\leftarrow (fg,1)と置きなおす。

こうすると、毎回の更新も[x^i](f_ig_i)の計算もO(W)で行える。また置きなおしはN/W回発生するが、それぞれ畳み込みでO(N\log N)になる。合わせると全体の計算量はO(N/W\times N\log N+NW)W=\sqrt{N\log N}とすることでO(N\sqrt{N\log N})を達成できる。2secで通った。

全完4位。Exの速度順では3番目で、ペナ差で負けている。まあ賞金がないコンテストなのでどうでもよい。CあたりからGまで特に詰まることなく駆け抜けられて爽快だった。

コードゴルフ。AはやはりRaku。Bは正規表現で判定するのはよくて、文字集合をわざわざ書かなければならないsedより適当なエスケープシーケンスが存在する言語のほうが短くなった。具体的にはPerlVimで、入出力の差からVimが最短になっている。Cはdc。FはRuby。Exは今のところ自分のC++が最短になっている。他は手付かず。

昼までほぼずっと日記を書いていた。朝方完全に集中が切れたあたりで購読しているほかのはてなブログの更新を読みに行って、AOJ-ICPC Advent Calendarのために投稿された記事で扱われた問題2問に取り組んだ。どちらも結構すんなり通せてうれしい。

まず700点のEulerian Flight Tour。

AOJ 1393 - Eulerian Flight Tour - かっつのメモ帳

グラフに辺を追加して、単純・連結かつ次数がすべて偶数なものにしたい。最初は次数の条件を満たした後連結にすることを考えていたが、場合分けが面倒そうだったので方針を切り替え、まず完全グラフを作ることにした。nが奇数ならばそれでよい。

偶数の場合、入力のグラフに対する補グラフの辺のみを使って各頂点の次数を1ずつ減らしたい。補グラフの各連結成分が偶数個の頂点を持つことを確認した後、連結成分内で適当にペアにして二つを結ぶパスを取り、奇数個のパスに出現する辺を取り除けばよいと考えた。しかしこれだとサンプルで落ちてしまう。連結性が満たされないケースがあるようだ。

連結性が満たされない場合、取り除いた辺がウニグラフのようになっていると考えた。この場合、ウニの中心に接続する辺以外で入力に存在しなかった辺を一つ選び、その辺とウニの中心で作る三角形上の辺の状態を切り替えると、次数の偶奇を変えずに連結性を満たせる。入力のグラフが完全グラフ+1点だった場合はどうやってもダメなので、これで十分な構築ができているはず。出したら通った。

しかし本当にウニグラフになっているかどうかがよくわからない。そこで、使う辺を補グラフ全体ではなくその中で固定した森から選ぶことにした。具体的には補グラフの連結成分ごとにdfs木を考えて、その上の辺だけ使ってペアを作る。こうすると取り除く辺の数が高々n-1本になるので、もし残りのグラフが非連結になっていたら、ウニグラフを取り除いたということが示せる。dfs木を考えるのは上に貼ったブログを参考にした。

https://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=7161934

次に900点のAnimal Companion in Maze。

Animal Companion in Maze (AOJ 1374) - あああああ

無向辺を有向辺2本に分解し、辺を状態としてメモ化再帰することでとりあえず答えが出せる。途中でループを検出したら即座にInfiniteを出力すればよい。ところがこれだと値の取得のため行先の頂点に接続する辺をすべて見る必要があり、TLEしてしまう。

そこで値の取得をセグ木で行うことにした。各頂点についてそこから出る辺を適当に並べ、セグ木を作る。さらに値が確定していない辺のみを集めた列も作っておいて、必要な値がすべて出そろうまでこの列の要素を削除しながら再帰的に解いた。再帰する前に大きな値をセットしておき、それを取得することがあったらループしたと判定できる。

https://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=7161973

辺に値をメモする方法は、全方位木dpを知らなかったころにそれが想定の問題を何とか解こうとして編み出したことを覚えている。結局その時はTLEしてしまったのだが、原因は上に書いたものと同じだった。リベンジみたいな感じになって嬉しい。

Submission #1214159 - square869120Contest #4

午前11時半就寝。

12/11(日)

午後7時半起床。今日の昼間に行われたJOI二次予選の問題がもう公開されていたので、取り組んだ。

JOI 2022/2023 二次予選 過去問 - AtCoder

Aは\max A-A_iA_i-\min Aのうち大きいほうを答えればよい。\max\minを達成するインデックスが一致してしまうケースでも、もう片方が答えになるため問題ない。

Bは誰が4人のうち最も身長が高い人になるか決め打つ。残りは各クラスに対し身長がその人以下で最も高い人を選べばよく、これは決め打つ人を身長の昇順に見ることにすると一緒に計算できる。

Cはどの連結成分のマスを指定するか全探索する。見ている連結成分に隣接する連結成分を列挙し、どの色が最もマスの数が多いか調べ、その色で元の連結成分を塗りつぶすのが良い。

Dは面白かった。どの駅の貨物を駅1に輸送するか決めると、遠いほうからW個ごと一気に持ってくるのが最適。なので、これまで選んだ貨物の個数\bmod Wと燃料の残りを状態とし、遠くの駅から順に輸送するかどうか決めるようなdpが思い浮かぶ。しかし計算量はO(NWD)となり、実質O(N^4)なので間に合わない。

ここで、そもそもすべての貨物を輸送できるケースが多そうだと気づいた。どのくらい燃料が必要か見積もってみる。駅N-W+1\dots Nの貨物を輸送するために2N、駅N-2W+1\dots N-Wの貨物を輸送するために2(N-W)、……となるため、すべて足すとO(N^2/W)になりそう。この値をDが上回っていれば、答えが直ちにわかるのだ。

逆にそうでない場合D=O(N^2/W)である。この場合O(NWD)=O(N^3)となるため、上のdpを実際に計算しても十分高速。これで解けている。

Eは解けず。各区画について、それより標高の高い区画かつ最も近くにあるものを西・東それぞれ見つけておく。見つけた区画の標高が自分以下になったタイミング以降ならいつでも、その方向からの嵐で標高が減少するはずと考えた。タイミングを特定するのは二分探索。内部で、区簡に対してある値未満の要素を数えるデータ構造を使っており、合わせると\logが三つついてしまった。

何とか実装しきったもののサンプルすら合わない。なんと、ある方向からの嵐で標高が減少した場合に、これまで逆向きの嵐に曝されていたのが隠れてしまうケースがあるらしい。当たり前すぎる。しかも、一方向からのみ嵐が来る小課題4は解けるだろうと思って出したらTLEしてしまった。

そういう困ったことが起こるのは標高が最も高い区画の近辺だけだろうと考え、そういう位置より先に嵐が到達しないよう最初にXを書き換えてみた。この時見る標高は当然真面目に計算できるわけもないので、隠れているかどうかを考えずに計算した値を使った。出してみると小課題2と3も通るようになった。ただし小課題2はTLEが一つ取れない。

最後に小課題1の愚直を書いて53点が最高スコア。これをひねり出しているうちにもう日付が変わる時間になってしまった。

コードゴルフはAとBのみ。AはOctaveでそのまま、BはRuby

午前0時半からCF #837 div.2に出た。

Dashboard - Codeforces Round #837 (Div. 2) - Codeforces

Aは最大と最小を選ぶ。aが全部同じ値のケースに注意。Bは区間の右端を固定して数える。Cは\sqrt{10^9}以下の素数が3000個ちょっとしかないらしいので、ギリギリ素因数分解できる。あとは同じ素因数を持つ数のペアが取れるか調べればよい。素数を列挙するのに失敗して1ペナ。

Dはパスの端点の組を状態とするdp。求める回文の長さが奇数の場合は真ん中の文字に対応する頂点のみのパスからスタートする。偶数の場合、真ん中二つの文字は必ず隣接しているから、それを結ぶ辺からスタートする。

パスを伸ばす方向にしか遷移できないので、例えば(u,v)という状態から頂点uをそれに隣接する別の頂点に変化させるとき、uからvの方向に1歩進んだ頂点は選べない。そういう頂点はO(n^2)かけて前計算できる。

片方の頂点を変化させるケースと、両方の頂点を一気に変化させつつ回文を伸ばすケースが存在する。状態をパスの長さの昇順に見たかったため、012BFS、正確には12BFSとして実装した。

Eは上端下端と左の縦棒の列を決めた。O(n^2m)。上端下端を決めたタイミングで、どの列なら縦棒を配置する余裕があるかとか、どの列から横棒を伸ばすとどこまでいけるかが決まるので、前計算しておく。この前計算も普通にやるとO(nm)かかってしまうので、下端を下にずらしながら更新していく必要がある。

そうやって必要な値が求まれば、あとは右の縦棒の列としてどこまで遠い列が使えるかを毎回求めればよい。ここは尺取りっぽくできるので計算量に\logがつかない。

FはZobrist Hashを使いそうだがメモリが厳しい。aの要素は重複を省くと2^{18}種類くらいあるものと考えられて、これを小さいほうから2^{10}個ずつブロックに分け、それぞれでZobrist Hashを使い奇数回出現する要素があるかチェックしてみた。そのような要素が存在する最初のブロックを探すと2^{10}要素が候補になるので、それぞれ個別に確かめる。

この分け方だと2^{18}/2^{10}\times(n+1)個のHashを持てばよくて、Hashをint型で計算する場合メモリ制限の256MBにギリギリ収まる。提出したら思ったより高速に通ったものの、pretestが弱かっただけらしくコンテスト終了直前にHackされてしまった。

5完25位。後からFのHashをchar型やshort型で取ってみたが、TLE云々の前にWAが出てしまい通らなかった。

朝までずっと日記を書いていた。一瞬ハーメルンに意識を吸い取られ、1作読了。「ろっく・ざ・らいふ」。主人公の歌声や後藤ひとりのギターの音色を形容するのになかなか多くの言葉を費やしており、ギリギリくどくないというバランス。しかし主人公もそれくらいすごいというのは好みの設定だった。

syosetu.org

日記を書き終え、しばらく講義スライドや教科書を読んでから布団に入り、寝る準備を完璧に整えた。それからうっかりハーメルンを開いてしまい1作読了。「提督落ちたから自力で鎮守府作る。」。

syosetu.org

艦これの設定を何一つ知らないが、重要そうなところには説明が入っていたので何とか読めた。あるいは自分が理解できた設定だけで読み進めるのに問題なかった。

面白そうな勘違いものだったがかなり序盤でエタっており、少し物足りない。鎮守府を作るといってもまだサバイバルの域を出ていないのだ。つい最近3年ぶりに更新され、いよいよ話が大きく動きそうに見える。しかしこの先、また定期的に更新があることはあまり期待していない。

午前11時就寝。