週記(2020/10/19-2020/10/25)

10/19(月)

日曜日の分までの週記を投稿した後布団に入り、ずっとごろごろしていた結果、寝たのが17時過ぎになった。日付が変わる前に起きてハーメルンを読んだ。読み終わってから起床報告をした。

私の世界は硬く冷たい - ハーメルン

紅魔館組とハリー・ポッターのクロスオーバー作品。作品間のキャラクターの関係性だけ見ればかなり「Game of Vampire」を彷彿とさせる。実はこれは逆で、「Game of Vampire」の連載がスタートしたのは上の作品が完結してから2年後のこと。

ただ、登場人物たちのキャラクターが全然違っている。こちらは何というか、人を人とも思わない認識が紅魔館組に通底している。この点で微妙に人を選びそうな気もする。

50話くらいで完結しているが、1話1話がそこそこ長いので、文字数的には771,065文字と結構ある。こんなのを集中して読んでいたので生活リズムが大崩壊している。

日付が変わってから、起きる。しばらくAtCoderをしていた。そろそろICPCのアカウントに情報を登録するのを完了させたい。国内予選への参加登録手順を今一度確認していたら、誓約書について何も発表がなされていないことに気づく。一体どうなるんだろう。

今日はラノベを読もう。一番最近買ってきたものは机の上に積みっぱなしになっている。その前に買ってきたやつも、またその前に買ってきたやつも、半分も手を付けておらず本棚に押し込まれている。

まず「午後九時、ベランダ越しの女神先輩は僕だけのもの」を手に取る。イラストを担当するみわべさくらさんがかなり好き。「隣のキミであたまがいっぱい。」も買おうとした記憶があるが、なんでか買っていない。確かあらすじを確認してあまり心惹かれなかったのだと思う。今回のこれは設定もよさそうなので購入を決定。

イラストページをなめるように読んでいたら、誤植を発見してげんなりしてしまう。キャラクターの名前のローマ字表記が違っていた。フォントの問題で「き」が「さ」に見えたのかな?イラストページくらいしっかりしてくれよ。

内容は……よくわからない。良いか悪いかでいえば、良い。ヒロインの描写がなんとなく淫靡でドキドキした。

この作者の著作は他にも読んだ記録が残っている。「手のひらの恋と世界の王の娘たち」というシリーズで、2巻打ち切り。比較して何か言おうとしたけど、内容を何も覚えていなかった。

次に「氷の令嬢の溶かし方」を読む。なろう発。ふぁぼんさんが天才クールスレンダー美少女ものの1つとして挙げていたので、なろうのほうで読んだ。そこそこ好きなので購入を決定した。

かなり良かった。なろうのほうは最近更新が滞りがちなので印象が薄れていたが、書籍版という形で読み返すと改めて面白いことを確認できた。

設定的には隣人・同級生の美少女・半同棲ということで「お隣の天使様にいつの間にか駄目人間にされていた件」との共通点がかなりあるが、それをどう料理するかというのは筆者によってさまざまなので、どれだけ読んでも面白い。

どれだけ読んでも、と言ったのには理由があって、この設定の作品は書籍化に限ってもかなり多いのだ。隣人まで入れると結構絞られるが、それ以外の設定が共通しているシリーズなら実際僕も4つ5つくらい読んだ記憶がある。

なんにせよ、1巻はまだ馴れ初めといった感じなので、続刊が出るよう祈っている。そういえば作者が2000年生まれらしくかなりびっくりした。僕の1個下ということになる。

サークルメンバー全員がICPCアカウントへの情報登録を完了したそうなので、チェックをお願いするメールをコーチに出す。正午、就寝。

10/20(火)

午後9時くらいに目を覚ましてメールを確認すると、HHKB プログラミングコンテスト 2020の受賞メールが届いていた。学生3位ということで、HHKBのキーボードがもらえる。やったぜ。

ちょっと前までは無刻印に無邪気な憧れを抱いていたが、冷静になるとまだそのレベルではないだろう。さらにUS配列ということで、普段使いはしなさそう。という考えのもと、素直に日本語配列のキーボードで希望を出しておく。US配列のキーボードはすでに1つ、昨年のICPC横浜の企業賞でもらっている。

そういうのを決めつつうだうだしていたら、こどふぉdiv.3が始まっていたので、慌てて参加する。40分で全完。

全部自明だった。まあdiv.3に出場するのはただの暇つぶしなので、学びが何も得られなくとも問題はない。

E問題は問題文を丁寧に解釈すると数珠順列のはずなのにサンプルは円順列ということでひと悶着あったらしいが、サンプルを合わせに行ったので特に引っかかってはいない。

布団に転がって今日もラノベを読む。「家族なら、いっしょに住んでも問題ないよね?」2巻。設定はかなり好きだったが、残念ながらこれが最終巻らしい。

読んでみると、なんというか文章に難がある。かなり読みづらかった。地の文の途中に台詞がめちゃくちゃ挟まっている。でもこれを毎回改行していたら今度はページ数がかさむだけになるので、難しいところっぽい。

読み終わって、別のラノベを手に取りながらゴロゴロしていたら、午前6時のツイートを最後に寝落ちした。生活リズム戻ってきてないか?

10/21(水)

午前11時くらいに起きてしまう。生活リズム矯正の達人。

また一人「玉葱とクラリオン」に生活を破壊されている人を観測した。いいぞ。

昨日風呂に入っていないが、今日起き抜けから頭がかゆくてかゆくて仕方がない。急いでシャワーを浴びる。

布団でラノベを読んでいたが、どうにもおなかが空いて仕方がないので、学食に行く。起きた時に空を見たら雲一つない青空っぽくていい気分だったのに、今見るとかなり曇っていて残念。

醤油ラーメンを食べて、ブラックサンダークーリッシュのマスカット味を買って帰ってくる。

朝読んでいたラノベの続きを読もうとするが、どうにも興が乗らないので、景気づけに別のラノベを読む。

何を読んだのかは書かないので、気になる人は読書記録から辿ってほしい。正直好きではない。シリーズを買い始めたら続刊は必ず買うことにしているので、それでかろうじて買っている。

物理的に薄っぺらいので30分くらいで読了。感想もない。

最近またTLでマルコフ連鎖のツイートを見かけるようになった。前回流行ったときは手を出さなかったが、今回はちょっとやってみようかという気分になる。

思ったより連鎖してくれないんだな。結構な割合でツイート1つがそのまま出てくる気がする。何度も生成して面白いと思ったものを投稿。

最後のは、明らかに『1ケースだけ落ちた京都人「えらい丁寧にテストケース作らはりますなあ」』+『脱糞された京都人「ええ括約筋お持ちどすなあ」』。そうつながるのか。

おすすめのなろう小説まとめを更新する。「うちの脳内コンピューターが俺を勝たせようとしてくる」が公開状態に戻されたので、これを紹介しないのは嘘になる。改めて累計ランキングを見ると、現在1位の「このすば*Elona」とは本当に僅差である。しばらくしたら抜きそう。

月曜日に読んだ「氷の令嬢の溶かし方」のなろう版を含む4つを追加して更新ツイートをしたら、作者の方に捕捉された。恐れ多い。○○と設定が似ている、というコメントも読まれてしまった。最悪な部類の感想であると自覚はしている。

ところで、「うちの脳内コンピューターが俺を勝たせようとしてくる」で、こんな一文がある。

最後、6六桂と打ってアルファゼロの玉は何処へ逃げても金打ちで詰みと言う状況になる。

うちの脳内コンピューターが俺を勝たせようとしてくる - 一閃 - ハーメルン

これは詰みなのでは?と思っていたが、実際には必至というらしい。確かに、詰みであれば王手をしている必要がある。

ICPCアカウントの情報の登録について、コーチからメールの返信があった。まだ数名エラーが出たままの人がいたらしい。まあこんな複雑な手続きが1発で完了することなど想定していない。毎年エラーが出たままの人が数名発生するので、その修正分の時間的余裕は十分に確保して動いている。

顧問の先生に公欠届を発行してもらおうとしたら、なんと送ったPDFファイルを印刷して署名・押印の後再度スキャンして送り返してくださるそうだ。僕が先生の研究室なり講義室に出向く感染リスクが減らせてうれしい。決して家から出なくてよくなってうれしいわけではない。本当。

あと、紙の公欠届をサークルメンバーに渡すのにわざわざ予定を合わせる必要もなくなった。PDFファイルをSlackで渡して終わりである。最高やな。

FFTやNTTのin-placeで速い実装を学びたい。具体的には、ACLが何をやっているのか知りたい。競プロerが書いたブログ記事を少しあさるが、よくわからなかった。今日はもういいや、という気分になってしまう。

10/22(木)

午後1時に起きる。学食に行く。

帰ってきて、ICPC関連でコーチにメールを送る。昨日、ICPCアカウントへの情報追加が不十分な人にメンションを飛ばして済ませてもらったので、再確認をお願いする。もう1つ、公欠届の書類を作って、これもメールで顧問の先生に送った。

メールを2通も送るとヘトヘトになる。布団に倒れこんでハーメルンを読む。

ダンブルドアは自由に生きられるか - ハーメルン

コーチからメールが返ってきた。まだ1人不十分な人がいたらしい。それと、ICPCに参加する場所の件についてSlackのワークスペースを作ったので参加してほしいとのこと。

今年の特別ルールではチームメンバーが集まる必要性が薄いため、集会許可でちょっと大変で、研究室から全チームが出場するのは許可が下りないらしい。なるほど。

Slackのワークスペースでやり取りをする。投稿にはかなり気を遣うけど、メールを送信するよりは手軽。

サークルから出場するチームは全員集まって参加してほしいと思っていたが、これに関しては今まで全くアンケートなど取っておらず、一方的に押し付けていた。集まって参加してほしいことの理由の言語化にかなり苦労し、最終的には諦めてしまった。

僕は各チーム(特に今年初参加の人を含むチーム)ごとに集まるのは重要だと感じていて、それなら最初から場所を用意して全員で集まるべきだと考え、そのように周知していましたが、実際アンケートなどをとったわけではないです。

このような文面の投稿をした。あとは、現状学生が借りられる大学の施設はどれも1部屋1チームが限界だという話をした。

顧問の先生曰く、青葉山キャンパスにある研究室だけでなく川内北キャンパスの部屋が借りられるかもしれないとのこと。青葉山キャンパスは理学部や工学部があるところで、川内北キャンパスは1、2年生の間の全学教育が行われる場所だ。あと、研究室と同じ建物の別の部屋も借りられる可能性がある。

ということで、青葉山から出るか、川内から出るか、それともチームがバラバラに自宅から出るかアンケートを取った。

Slackのリアクションを押してもらう形式だが、碧黴さんがやっていたのをずっと真似している。多重回答を防ごうとしたら、アンケート専用のサービスを利用する必要がありそうなので、どうしようもない。この形式はSlackで完結しているし手軽でよい。と思っていたら、公式でもこの形式が説明されていた。

アンケートを作成する | Slack

医学部生を含むチームが自宅から参加することを選択した。医学部キャンパスはまた別のところにあったはずだから、そこから移動するのは大変なのだろう。このことは全く意識していなかった。来年もしサークルの運営に携わっていたら、気を付けておきたい。(初参加3人のチームなのでルール的にちょっと不安ではある。)

そもそも、僕自身ルールをしっかり把握しているわけではない。今年のICPCのルールはまだ仮のままで、開発環境の事前準備をどこまで許すか、という部分が難しそう。TLで話題になっている。

僕はVimを使っているので、.vimrcを消し飛ばしておけば少なくともルールに違反することはない。そもそも本質的には以下の4行しかないため、コンテスト中に書き直すのも簡単。

set autoindent
set smartindent
set tabstop=4
set shiftwidth=4

統合開発環境でプログラミングをしている人たちは、事前の準備がどこまで許されるのかに興味津々らしいが、まあ勝手にやっててくれといった気持ち。ただサークルの人にルールを説明する必要があるかもしれず、関係ないやと無視するわけにもいかない。

ICPCアカウントへの情報追加が、全員完了した。やっぱり時間的には余裕だったな。特に今年は登録期限が伸びている。

夜、AOJ-ICPCを進めていた。

10/23(金)

寝落ちしていて、起きたら7時くらいだった。直前のツイートから5時間しか経過しておらず、睡眠時間が足りていない。

しかし、ついうっかりスマホを触りだしてしまい、二度寝できなくなった。しょうがないので起きる。今日はゴミ収集の日なので、まとめて出す。前日の深夜にするつもりだったのだが。

かなり眠いので布団に入ってゴロゴロしていた。学食が閉まりかけたので、慌てて起きて向かう。

昨日とった参加場所に関するアンケートに回答が集まっていた。集計するのだが、本名→ハンドルネーム→チーム名と2段階の変換をかまさないとならず大変だった。特に本名とハンドルネームの対応は難しい。弊サークルの入部届にはハンドルネームを書く欄もあるため、今年や去年のものを見ることで何とか対応をとれた。

それと、昨日青葉山に研究室とは別の部屋が借りられるかもしれないという話があったが、ダメらしい。結局青葉山から参加するならば研究室に集まる必要があるので、研究室チームの方にも川内から参加できないか聞くことになった。

idタイブレークされるようになったらしい。うれしい。

川内の部屋は、話し合いが行われて無事借りられることになったようだ。メールのやり取りだったらどれだけ時間がかかっていたかわからないが、Slackでやり取りしたので迅速に話がまとまったらしい。なんかこう、すごいな。仕事効率化ってこういうことですか?

AOJ-ICPCを進めようとしたが、うっかり布団にダイブしてしまう。耐え切れず意識を失い、目が覚めると日付が変わりかけていた。6時間も寝てしまい、SRMとyukicoderをすっぽかした。この時間に寝るのは、ヤバい。明日のARCに直撃している。

yukicoderは前回も出ていないので、両方解けるところまで解いておく。今日の分は全部ACできたが、問題のタグが見えている状態で解き始めるので、コンテスト中とは具合が違う。かといってわざわざ未ACの問題のタグを表示しない設定にするかというと、うーん。そこまで問題を大切にしてはいないかな。

夜、またAOJ-ICPCを進めていた。500点問題は残り12問。そのうち7問は1回読んで飛ばしている。どうしよう。

10/24(土)

金曜日の夜は37時に寝た。起きたら土曜日の20時だった。目覚ましを数回逃している。かなりギリギリの起床となってしまった。

生活リズムが崩れているので、せめてもARCの時間に眠くならないようにと、意図して寝る時間を遅めたのだが、遅めすぎた。

シャワーを浴びてご飯を食べるともう5分前だった。

遅めの4完、パフォーマンス2222で全てが崩壊した。海は枯れ、地は裂け、全ての生物が死滅した。

A問題は基本的な全探索。安全性を求めてRubyで実装した。

B問題は明らか。Union-Findを貼った。ACLを使うことも考えたが、メソッド名に自信がなかったため自前のライブラリを使用した。

C問題も明らか。と思ったらWAが出た。N>M-2が怪しい。N=1M=0で落ちそうだ。ここまで考えて提出結果の詳細を確認すると、実際1ケースしか落ちていなかったため、修正してAC。本来はN=1M=0のケースは8個くらい存在していたらしい。別にそれでもいいと思うが、本当にそんなことになってハマっていたらたぶん許さなかったと思う。結局次の問題でハマるんですが。

D問題はわからない。去年のICPCバンコク大会でSum[i^k,{i,1,N}]0<=k<=75で求める問題が出たが、これがDPで解けることを知っていたので、その方針でしばらく考えていた。結局捨てた。

Lに対してRの累積和を使用して計算する方針で、O(NK^2)を書く。遅くて通らない。NTTを使用してO(NK log K)に改善したらもっと遅くなった。

この改善の過程で、A^i/i!のような式が見えていたので、それをもとに式を分離しようとすると、(全ペア-同じもの)/2というい つ も の計算が見える。慌てて計算を進め、AC。1時間かかっている。

残り30分もない中、Eを開く。一切考察が進まず、フィーリングで適当なプログラムを組むと10ケース落ちる。実は探索範囲足りないんじゃないの?という感じでアタフタしている間に終わり。

シンプルに辛い。Fを見てもよくわからないが、TL曰く「次数列が決まると木を数え上げられる」とのこと。それは……覚えがある。

atcoder.jp

まあこれ見てもO(N^2 log N)から落ちないので、無理。

もう本当に絶望してこどふぉdiv.2に出る。5完。E問題は数列が与えられて、連続する部分列のMEX全部のMEX。こんなシンプルな問題設定で既出じゃないのか?かなりびっくりするな。

かなり苦労したが、何とか解けた。ある値xが連続部分列のMEXとなりうるかを調べたい。a_i==xなるiを取ってきたときに、そこから右にあって一番近い値bのインデックスをid_bとしよう。i+1から始まる連続部分列はxを含まないという条件のもとid_x-1まで伸ばすことができ、できるだけ伸ばしておいたほうがいいので、i+1からid_x-1までに1..x-1が全部出現するかを調べればよい。インデックスで言い換えるとforall b<x [id_b<id_x]を判定することになって、Range Max Queryで解ける。あとはa_i==xなるi全部と左端でこれを判定すればよい。

逆に、iについてa_iが連続部分列のMEXとなりうるかを判定できる。右にあって一番近い値のインデックスを計算するという要請から、iは降順に見ていけばよい。降順に見終わったら、左端での判定も同様に行う。

答えが1になる場合は上のコードだと1が「空列のMEX」と判定されてしまうので、別に処理する必要がある。

ハーメルンを読んだ。

【完結】ハーマイオニーと天才の魔法式 - ハーメルン

ハリポタの二次創作で思いっきりチートなの初めて読んだな。

明日の模擬国内予選に出場する場所がちょっと問題。川内ホールの屋内練習場とか会議室とか、借りれないこともなさそうだったけど、前日の午後3時までに申請する必要があった。部室が候補として挙げられている。本当は荷物の出し入れくらいしか許されていないのだが、ちょっとくらい……コンテストに出てもバレへんか。

10/25(日)

12時半に起きる。結構時間に余裕がある。slackのruby-jpを見ると、dsugroupsメソッドがバグっているらしい。コードを確認すると確かに間違っていたので、手早くpull requestを作成した。

バグの原因は、parent_or_size配列の要素が常に集合の根を差すという勘違いだ。これは、わかる。多分僕もやらかした・やらかしそうになったことがあったはず。

コンビニで朝ご飯を買いつつ、部室に向かう。途中の交差点は走るタイプのマラソン大会の影響で交通規制があって大変だった。

部室の鍵が開いていないので、地べたに座り込んでパンを貪る。

人が来たので準備をする。窓と扉を全開にして、Wi-Fiを設定する。この設定に手間取って少々遅れたが、ちゃんと3人そろってコンテスト開始。

コンテスト中の様子・結果については参加記を書いた。

kotatsugame.hatenablog.com

記事によって敬体と常体を使い分けている。基準は特にないが、週記は常体にしている。おどけて書いた部分以外は混ざっていないはずだ。ここをおろそかにした文章は全部カスだと思っているので、注意している。

帰ってきて布団に倒れこんだが、うっかりこどふぉに出た。

A問題は27分かかった。途中何度も止めて寝ようか考えたが、せっかく問題を見たのだし……と頑張って考え続けた。ソートして出現回数を数えつつ尺取りする。

B問題は7分。stackでシミュレーションする。直感的に、- xが来たら直前の+xを並べていたことにしてもよい。直前の+の前にxより大きい手裏剣を買っていたらNG。

C問題は10分。a>bcなら攻撃するたびに回復まで含めても敵のHPは減るため、答えは-1a<=bcのとき、1度攻撃して回復し切られると敵のHPは増えるか元のままになる。なので、最初に攻撃してからc秒経過するまでにケリをつける必要がある。また、攻撃のタイミングはできるだけ早めるべきである。

i回目の攻撃はできる限り急ぐとd(i-1)秒に行われる。d(i-1)<cよりi-1<=(c-1)/d

i-1回目の攻撃を加えたあと、i回目の攻撃を加えるまでにHPはbd(i-1)回復する。よってi回目の攻撃で与えられるダメージはa-bd(i-1)としてよい。これが正でないなら攻撃する意味はないため、a-bd(i-1)>0よりi-1<=(a-1)/b/d

逆に、i-1<=(c-1)/dかつi-1<=(a-1)/b/dである間は攻撃を加え続けたほうが良い。そのようなiの最大値をRとおくと、答えはSum[a-bd(i-1),{i,1,R}]==aR-bdR(R-1)/2

D問題を考えている最中、何度も眠り込んで意識を飛ばしてしまう。順位表を見ても全然通されていないので、あきらめて上の参加記を書いていた。