週記(2020/12/07-2020/12/13)

12/07(月)

寝たのが午前5時で、目覚ましで起きたのが午前8時半だった。しかしあまりにも眠すぎる。予定は8時50分からなので、間に20分もあるのは辛い。そこで、8時45分に目覚ましをセットしなおしてもう一度寝た。これの起床も成功し、見事説明会が始まるのと同時にzoomに接続することに成功した。

別に内容に注意を払ったりはせず、音声を流しっぱなしにしてPCKの問題を進めていた。自分が数学のどんなジャンルが好きでどのような研究に興味があるかなどを一切考えたことがない。そもそも1年次の負債を返そうと躍起になった結果再履修と被って取れなかった選択必修はかなり重要だったらしい。このまま4年に進んでも自分の知識不足で炎上し続けるのではないかと薄々思っている。しかし焦燥感とかは一切湧いてこず、ずっと競技プログラミングをしている。

自分の将来に対して深く考えることができない。心の奥底ではまだその必要がないと思ってしまっているためである。自分の将来を考えたところで競プロの実力とは一切関係がない。競プロと関係のないことを考えて落ち込んで身動きできなくなるのは時間の無駄。

チュウニズムには30日連続ログインの称号が存在する。取得したときのツイートを探してきた。高校生の頃の微妙に受験を意識したツイートを今見るのは非常につらい。

この称号はそろそろ配布が終了して取得できなくなるらしい。なんでそうするのかよくわからない。

学食に行って帰って、しばらくパソコンを触っていたが、うっかり布団に寝転んでしまう。非常に強い眠気に襲われて、耐えられないと確信したので、サークルの解説会1時間前に目覚ましをセットして寝た。

午後7時、無事起床。夢を少し覚えていたのでツイートした。

ARC109の解説会まであと1時間だが、発表者が誰もいない。必死に用意したが、AB問題のスライドを作ったところで時間切れ。そのまま発表して、C問題も一応絵を描いて話した。ほんの15分程度で終わってしまい、ほかにすることもないため今週の活動は終わり。この土日はABCがなかったので、来週もARCの解説会になる。また内容がないようにならないよう頑張っていきたい。

昼前からラノベを読んでいた。「天才最弱魔物使いは帰還したい」。タイトルはいかにも量産型なろうといった趣だが、これは2月ほど前にも週記で言及したように、最も好きな作品の書籍化である。

書籍化!?

週記(2020/09/28-2020/10/04) - kotatsugameの日記

1文字1文字舐めるように読んでいく。全面改稿されたものが新しい作品としてなろうに投稿されているが、そこからさらに改稿されたりはしていないようだ。ちょっとした修正が入っているだけ。元の作品から数えて、同じ展開をこれで3度読んだわけだが、やはり毎回面白い。主人公のフィル・ガーデンが元SSS級探求者であることは、以前は物語の途中で明かされることで、カタルシスの一つとなっていた。書籍版では裏表紙のあらすじに堂々と書いてあるので、ちょっとどうだろうと思ってしまいがち。ただ、主人公の実力を途中で明かすことによるカタルシスは、それまでの部分で読者が脱落してしまう可能性も孕んでいるため、書籍となって新規読者を獲得するためにはそういう情報は前もって開示しておいたほうが良いのかもしれない。

イラストがついていてかなり良い。フィル・ガーデンが思ったよりかっこよくて高身長でびっくり。アムは表紙絵なので以前から公開されていた。特にイメージを作って読んではいなかったので、そんなものかと受け入れられる。アリスもそう。アシュリーは絵がない(それはそうか)。エトランジュ・セントラルドールはたぶんイメージ通りだったと思う。

書き下ろし短編はフィルが王都にいるときの話だった。王都のフィルが描かれるのは初めてではないか?最高すぎる。これだけのために10倍はお金を出せる。10冊買ったりはしないんですが……。

https://onlinejudge.u-aizu.ac.jp/solutions/problem/0425/review/5038437/kotatsugame/C++14

左から2回シミュレートする。タイプ1のクエリについては、1回目のシミュレートでt番まで入れ替えを行ったときの左からx番目の番号を覚えておき、2回目のシミュレートでs-1番まで入れ替えを行ったときに先ほど調べた番号がどこに存在するかを答えればよい。タイプ2のクエリについても、stを入れ替えて同様のことをすればよい。番号の位置を調べるのは、値からインデックスを検索する配列も同時に持って更新することでできる。以上よりO(N+K+Q)で解ける。これは解説のMo's Algorithmより良いオーダーとなっている。

布団に入ってハーメルンを1作読み終えた。たこノすけのハーメルンおすすめから知った作品だった。

syosetu.org

taconosuke.hatenablog.com

非常に面白かった。東方Projectのオリ主系、好きかもしれない。基本強い能力を持っているので、主人公最強モノが好みな僕にとってはちょうどよい。この作品については、主人公のキャラも好みだった。

午前7時ちょっと前に寝た。

12/08(火)

午後1時半、起きる。布団に入ったままハーメルンを読んだりatgolferをチェックしてコードゴルフをしたりしていた。結局午後6時になって学食の夜の部に行くため起床、シャワーを浴びて原付で学食に向かった。午後5時台は大学前の道路が信じられないくらい混み合うので、できるだけ避けたかったのだ。ちなみに朝もヤバい。1限は0850からだが、その前後はただでさえ多い出勤の車に交じって大学生がわんさか出てきて、自転車が長蛇の列をなす。0830までに大学に着けないならば、逆に9時になってから悠々と向かうべきである。

案の定全然混んでいなかったのでうれしい気分になる。帰りはうっかり手袋を着け忘れたまま原付に乗ってしまった。気づいたときに停まって着ければよかったものを、数分だしいいかと思ってそのまま家に帰ろうとした。走り出して1分でその選択を後悔した。冷たい風に絶えず晒され、特に右手に関してはアクセルを開けるために片時も離せないので信じられないくらい辛い。もう二度と手袋着けずに冬の原付に乗りません。

帰ってしばらくPCKを解いていた。午後9時からサークルでこどふぉのバチャを行った。#602 div.1だ。AbBCdDEが解けた。出ていれば非常に良い順位だったようだ。

C問題は1<=N,M<=1e61<=NM<=1e6という制約なので、固定長配列で持つことができない。わざわざvector<vector<> >を書かされて辛い気持ちになった。

D問題はかなり簡単。しかも部分点がついている。dのほうは2数を全部試してよいが、Dでは片方しか試してはいけない制約。細かいことは面倒なので書かないが、abを試すのではなくa+bbを試さないと計算量を削減できなかったようだ。僕は最初からa+bbを試していたのでdからDはスムーズに考察が進んだ。

E問題はよくわからないと思いながら解いていたら4回も同じケースでWAを食らってしまった。冷静になって、ちゃんと証明したり確かめたりしてから提出すればよかった。適切に操作をすると、問題のサイズをnからn-1に小さくできるので、再帰的に解けばよい。再帰的に解くのだから、下から上がってくる解に条件を適当に設定して、上に渡す解もそれを満たすようにする。具体的には、解がユニークな操作列であることを常に満たすようにする。

F問題はコンテスト中のsolvedが全然増えなかったので、30分残っていたが早々にあきらめてラノベを読んでしまった。点数を見るとそこまで高い値が付いていなかったので、頑張れば解けたのかもしれない。

「公女殿下と家庭教師7」を読んだ。相変わらず非常に癖のある文体だが、話は面白い。かなり中二なので、冷静にならないように一気に読み進める。Web版ではなかった描写がたくさん追加されている。次の巻も楽しみだ。蒼翠グリフォンのイメージとして王獣を頭に思い描いていたのだが、文中でグリフォン同士が「長い首を絡ませた」という描写があってびっくりした。頭の中で王獣の頭がぐにょーんと飛び出してきた。

布団に入って寝る前に少しハーメルンを読もうと思ったら、一瞬で寝落ちした。午前5時から6時の間のはず。

12/09(水)

午後3時、起きる。午後4時になるまで布団でごろごろして、学食の夜の部が始まったのを見計らって自転車で行く。この時間帯は昨日示した午後5時台という混んでいる時間帯の前だが、実際コロナ禍においてどの程度なのかを実地に確認しておきたいと考えた。交通量はそこそこ多かったと思う。

帰ってきてからしばらくAtCoderをしたりYouTubeを見たりしていた。あとブックマークも少し整理した。読み止しのなろう小説が登録されていたが、数年放置したものをいまさら読む気にはなれないだろう。あと順番も少し入れ替えて、ブラウザの上のほうに表示される分はちゃんと現在定期的に使用するものに絞り込んでおいた。

ラノベを読んだ。「精霊幻想記」18巻。不穏な展開が多くて結構つらいが、Web版では重要キャラが死んだりもっと重い展開があったらしいので、僕は書籍版じゃないと耐えられなさそう。

今日も午後9時からサークルでこどふぉのバチャをする。今日は#562 div.1。ABCを解いたあとDに取り組んだが、初めのほうのテストケースで詰まって通せなかった。

C問題はグラフの持ち方に苦労した。要素数3e5になりうるvector171本持つ必要がある。正確には19x19の配列のi<jなる添え字(i,j)番目だけ必要なので、固定長配列を使うのもやりにくそう。

最初は、vectorに必要な箇所のインデックスを詰めておいて、lower_boundでアクセスしようとしていた。これはMLEした。何がMLEしているのかよくわからなかったが、dijkstraを使っていたので、priority_queueに疑いの目を向け(頂点数19なのにそんな重いわけないだろ)、Bellman-Fordに切り替えた。思いっきりTLEした。次に、試しにvectorのサイズを最初から3e5にしておいて、lower_boundで得られる値を後ろからループを回して求めておくことにした。先の実装における最悪ケースと常に同じだけの要素数になるため、変わらずMLEすると考えていたのだが、通った。

後から試してみたところ、どうやらvectorぶんのメモリを先に確保したのがよかったらしい。最初の実装でreserveしておくようにしたら同じメモリ使用量で通った。これから注意しておこう。速度面で改善されるという話は聞いていたが、メモリ使用量も改善されるのか。

D問題は最初の提出で誤りに気付いたは良いものの、その修正の際に紛れ込ませたミスにバチャ終了まで気づけなかった。良かれと思って入れたチェックだったので、あんまり見ておらず、それよりロジックの間違いをずっと探していた。

根の深さがすべて等しくないならば元より問いの条件を満たせないため、弾いておく。子を2つ持つ頂点が存在しない場合、別の処理を行う(後から見返せば、ここは分ける必要がなかった)。それ以外のケースにおいて、子を2つ持つ頂点と根だけに縮約したグラフを考えると、だいたい二分木っぽくなるので、更新があるたびにそこから根まで遡ってもO(log N)になることがわかる。あとは更新ができればよい。

各頂点はa~zそれぞれに対応する値を持つ。親は、それぞれ2つの子が持つ値のmaxを持っている。更新があるたびに毎回親の値と兄弟の値をチェックして、親の値に変動があった場合のみさらに上の更新を行う。

根が子を1つしかもっていない場合、そこだけ処理を分ける必要があった。最初のdfsによる前計算でも処理を分けており、配列に頂点に関する値を保存できていなかった。後からそれを使おうとしてバグっていた。具体的には、木の深さを知りたかったのに初期値0のままになってしまっていた。

PCKを進める。2020年の本選の問題がいくつか残っているので、頑張って解けるだけ解いた。最後の1問を諦めたところで、PCKの過去問1周が完了した。

中難易度の問題はどれも結構面白かった。少し考えるだけで解ける問題が好きなだけかもしれない。前半の虚無はあまり言うことがないが、やたら実装が面倒だったりはしなくて、身の程をわきまえた虚無だったのでやっていて苦にはならなかった。その分ボス問は(解けていないものも多いが)異常実装や幾何、データ構造パンチでそこそこ辛かった。

微妙に穴あきなのを何とかしたいと思い、予選を見直したところ、追加で2問解けた。片方は本当に辛かったので以下に書いておく。

https://onlinejudge.u-aizu.ac.jp/status/users/kotatsugame/submissions/1/0284/judge/5044205/C++14

凸多角形と面積に関する問題。解説では三角形を付け加えることによって面積を計算していたので、一点を決めてDPをしても遷移のコストが正で正しく動く。僕は線分とX軸が囲む面積を足し引きすることによって多角形の面積を求めようとしたため、上下で遷移のコストの正負が異なり、正しく動かない。左端と右端の点を決め打って上と下の2回DPする羽目になった。

ただ面積を求めればよいのではなく、復元も求められている。一瞬pair<面積,vector<頂点> >を持ってやろうかとも思ったが、さすがにまずいだろうということで頑張って復元することにした。

最大ケースでTLEが取れない。オーダーをあまり考えていなかったが、TLEするなら間に合っていないのだろうと定数倍高速化に勤しんでいた。上側に関するDPの際には関係する点だけ集めたvectorを作ってそこだけループを回したりなど。しかし後から冷静になって計算量を考えると、どう考えても間に合うはずなので、違和感を持ってもよかった。

30分くらい溶かしてから、書きかけのfor(int st=0;st<N;st++)というループがメインのループの前の行に残っていることに気づいた。すべての計算をN回行っていた。その行を削除すると爆速で通るようになった。

朝方、急に#define int long longに対する憎しみが湧き出してきたのでいくつかツイートをした。午前10時就寝。

12/10(木)

午後5時、起きる。午後6時半くらいまでゴロゴロして、学食に向かった。夜も深まると学食には弁当と揚げ物しか残っていない。野菜がないと健康に悪いことはわかっているが、腹が減っているので揚げ物だけでも食べるしかない。原付で往復したが、ちゃんと手袋をつけていたため手は守られた。足は相変わらず裸足にクロックスで、冷たさが際立った。

帰ってきてからYouTubeを少し見た後ラノベを読んでいた。「いずれ最強へと至る道」3巻。1巻と2巻を9ヶ月くらい前に一気に読んだっきりだったので、キャラの名前も設定もほとんど忘れてしまっていた。帯に「122ページにわたるバトルシーンを刮目せよ」とある(これ「バトルシーンに」のほうが自然に感じるんだけどどうなんだろう)。実際本の後ろ半分はバトルシーンだったのだが、それを煽り文句にするのはちょっと謎。

チートを得ていろいろやるというシンプルな話で、結構好きかもしれない。ただエピローグが完全に打ち切りといった感じだったので、続きが本になることはなさそうに見える。ちょっと気になるのでなろうのほうを確認し、学園編を見つけたので途中から読んでみることにしたら、時間が一気に溶けていってしまった。どうやら書籍化するにあたって結構ストーリーが変わっているらしい。

ところで一般に学園編は好き。学園という閉鎖的な環境だと目立ったり有名になったりなどの設定が簡単に付与されやすいからではないだろうか。

日付が変わったので、yukicoderアドベントカレンダーコンテストの12/11の問題を解いた。非常に苦労した。この日記が公開される頃には解説も出ているだろうから書くと、問題文ではNを言ったら負けなのに頭の中ではNを言ったら勝ちになってしまっていた。それで結構WAを重ねてしまった。

日付が変わる前後はAtCoderをやっていた。bashのAC数を稼ぐべく簡単な問題をずっと探し回っていた。もはや日課

ArCoderをしたりなろうを読んだりしているともう朝になってしまった。昨日サボってしまった分も含めて日記を書く。今日の文量が全然ないが、特にコンテストがあったわけでも難問にチャレンジしたわけでもない日なのでどうしようもない。書くことがないなら無理に書く必要はないなという結論に達した。

布団に入ってから、水曜日のvectorのメモリ使用量についてAzさんから助言があった。push_backによる再確保の際、以前のメモリ空間と以降のメモリ空間を両方持つ瞬間があって見かけ上のメモリ使用量が増えていたのではないかという話だそうだ。

午前5時半に送ったリプライを最後に、就寝ツイートをせず寝落ちしたらしい。

12/11(金)

午後3時、起きる。午前10時頃一瞬起きて金曜日の講義から課題が出ていないか調べたことを覚えている。今週はなかったので、安心して二度寝した。

夢を見た。場面場面だけは覚えていて、その間をつなぐストーリーはほとんど忘れてしまっていたが、ツイートするにあたってそれでは困るので、多少肉付けをした。しかしなお脈絡のない怪文書になってしまったようだ。

夢の中で空を飛ぶのは自分にとって結構ある話だ。中学生のころに2chかどこかで、明晰夢を見たり自分の都合の良い夢を見たりする方法を調べて試していたことがある。ほとんどはうまくいかなかったが、自分が飛べる夢を見ることは数度あったと思う。飛ぶときの操作も共通していて、自分が浮き上がるイメージを強く念じると飛べる。SAOの心意システムに影響されていると思う。本家キリト君は上着を翼に変えて飛行しているが(19巻あたりの機竜お披露目会の話)、特に翼を装着したりはしない。

やることがないのでTwitterアナリスティクスを見ていた。ここ3か月くらい月当たりのツイート数が倍近くまで増えているようだ。自分としてはそんなツイート頻度が変わった感覚はないが、まあツイートしないまでもTweetDeckは常に目の届くところに開いているので、無意識にツイート数が増えていても不思議ではないか。僕のアカウントのインプレッション数はこんな感じになる。

過去28日間のインプレッション

記録して後から見返すと面白いんじゃないかと思ったけど、月ごとの記録はさかのぼって見られるからなあ……。

今日はこどふぉdiv.2がある。適当に出た。5完。

A、B、Cは記憶がない。Dは変数名を間違えたままサンプルが通ってしまい、REとかWAではなくMLEを出してしまった。メモリ使用量はつい最近も少しやられたので敏感になっており、罪のないコードを一所懸命にデバッグしていた。処理を書き換えるときにコピペを多用してしまい、変数名間違いが引き継がれたままさらに1ペナ生やしてようやく気付けた。

Eは嫌な感じだ。解けてからも実装で手が止まってしまった。[l,l+x)に入るまで操作を繰り返すときに日数が尽きてしまうとどうしよう、と思って、うまく統一的に処理できないか考えていた。結局諦めて条件をベタベタ書いて済ませた。

Fは解けなかった。2 1 2 1 2 1 22以上の数をペアで考えていると2+1+2+1+2+1+2になってしまう。全体の積を一気に見ると3 3 1 1 1 1 1 1 1 1 23*3*1*1*1*1*1*1*1*1*2になってしまう。このうち、全体の積を見るときの条件付けが違ったらしい。僕は総和<=総積のとき積にしてよいと考えて、先に挙げた後者のケースにやられたけど、実際は2*(区間長)<=総積が正しい条件らしい。次のように証明できる:

区間0を含まず、両端が2以上であるとする。区間長をL、総積をMとする。どこかに+を入れることを考えると、左右の積はabに分かれる。a,b>=2かつab=Mである。この元で、最大の和を評価する。理想的な状況を考えると、積は1つにまとまって、残りの1がそれぞれ(積に飲み込まれず)別途に足せるのが良い。1の個数は両端が2以上であることを考えると最大でL-2個なので、和の最大値はa+b+L-2=a+M/a+L-2以下となる。これはa=2の時に最大値2+M/2+L-2=M/2+Lをとる。M>=M/2+Lであればよいので、M>=2L、もとい2*(区間長)<=総積が得られる。

あとは2L>Mの処理だが、これは連続する12以上をまとめた後2以上の場所の間に関してbitDPすればよいらしい。この計算量解析はRubikunさんが行っていた。サイズは最大でもlog_2 Mとなり、2^log_2 M<2^log_2(2L)=2LなのでO(L)である。僕の実装では12以上の間もbitDPしているので、O(L^2)になりそうなのだが、この時は気づかず出して通った。

「私立シードゥス学院」という本を読んだ。全寮制の学校で起こる事件を描いたキャラミスだ。細かいところがよく読めてなかったのか、腑に落ちない描写がいくつかあって難しい印象を受けた。

午前8時半、就寝。

12/12(土)

午後1時、いったん目覚ましで起きる。とりあえずHTTF本選のオープンに登録して1B解を提出し、午後2時のOUPCまでいくらか時間があるので再度寝た。午後1時半にも目覚ましを設定していたのだが、見事に聞き逃してしまい、午後2時になってようやく起床。OUPCが始まってしまっていた。

あまりに眠いためしばらく布団でボーっとしていたが、OUPCは3時間しかないので起きる。途中生協から弁当が届いたので受け取り、1つ温めて食べた。

結果はABCDEFGの7完最速で3位。あんまり変なことを考えずに前から解いていった結果、後ろから解いてペナが爆発した人に差がついた。逆に僕より速く7完した人はみんな(2人)I問題を通して上に行ってしまった。

A、B、Cに関しては特に言うことなし。Dはちょっとややこしいし証明もゴツそうだったが、適当に書いたら通ってしまったので深く考えなかった。Eは2進Trie。そのあとFとGを読んでGに行った。適当に場合分けをしていくと二部マッチングに落ちる。復元が面倒。

Fは非常に面白かった。頂点ごとに出る辺をコストでソートして、左端からどこまで使ったかと右端からどこまで使ったかを持つ。最短距離を配列に入れる必要がないのが面白かった。各辺を使うのが左から来て1回と右から来て1回なので、そこで計算量が落ちる。

I問題は可能な(x,y)の点集合がある凸多角形の内部になるようなので、ピックの定理で格子点の数を求めるらしい。ありうる値のペアが凸多角形をなす問題はどこかで見聞きしたことがあるはずだが、実際に解いたことはなかった。また出たらたまらないのでupsolveした。

PCKを2問解いた。1問はよくわからない問題で、綺麗に解けそうにない見た目をしていたためゴリ押しで解くことにした。よくわからない高速化をしたら通って、解説を読んだところ、bool値のDPをbit並列で高速化する問題だったらしい。そう……。

もう1問は以前チャレンジした際に誤読していたことが発覚した。そこさえわかってしまえばあとは自明、と思っていたが、実装をサボってO(3^(2K))を書いたらTLEした。集合とその部分集合を列挙するのにO(3^N)でいいところをO(4^N)かけるやつの3進数バージョンだ。3進数である必要、ある?ループではうまく書けないので再帰関数を用意したら通った。

これは北朝鮮ICPCもどきに関するWebページ。

全国大学生プログラムコンテスト

SRMがあったので出た。EasyとMedの2完で16位。2222→2306と+84した。Easyはなんかできると信じたらできた。Medは次の問題でほとんど既出のようなものだったが、蓋を開けてみると-iした後ソートしなおさない人が大量にいて大量に落ちていた。

atcoder.jp

Hardはよくわからなかった。ICPCだと信じて適当な解を書いたら落とされた。解説を読んでいないが、TLで見聞きした話によるとかなり天才らしい。ICPCじゃなかったのか……。

「マカロンはマカロン」を読んだ。

途中で本を1冊読んだ。創元推理文庫「タルト・タタンの夢」

週記(2020/07/20-2020/07/26) - kotatsugameの日記

朝、1冊本を読んだ。創元推理文庫「ヴァン・ショーをあなたに」

週記(2020/10/26-2020/11/01) - kotatsugameの日記

シリーズ3作目。このシリーズはどれもかなり面白かった。ほろ苦いタイプの日常の謎はたまに読むと効く。

眠れなかったので、少しだけ本を読もうと思って「〔少女庭国〕」を手に取ったら、最後まで一気読みしてしまった。ふろん氏からお薦めされて、あらすじに惹かれて購入したのだが、この本をあらすじで買ったのは完全に間違いだった。まさかこんな本だとは……。面白いことは面白かったが、何と言ったらいいかわからない本だった。何と言ったらいいかわからないので、内容については何も書かない。

午前9時、就寝。

12/13(日)

午後5時起床。夢うつつでABC遅刻すると思い込んでしまい、起き抜けは非常に焦っていたが、時計を見て落ち着いた。

ABCまで結構時間があるので、明日の朝期限のレポートに取り組むことにした。コンピュータグラフィックスという講義の3回目のレポートで、これまでは座標変換の行列を書く問題だったのが、ついに実際にCGを作成する課題になった。使用するソフトはPOV-Ray。公式のエディタが嫌な挙動(何もないところをクリックしてもそこにカーソルが移動する)をしてそこそこ使いにくいと感じたが、オプションをググっていじるほどやる気はない。

黄色の立方体から「赤い球引く球」「緑の球引く球」「青い球」をそれぞれ引くと、6個の立体で構成できる。カメラ位置や立体の大きさなどは違っていてもよいとされていたが、せっかくなので手本をガン見してできるだけ合わせた。

今日はABC185。A問題で2分、C問題で7分くらいコードゴルフしていたが、DEFが全部2分くらいでACできたのでタイムは21分だった。残り時間はコードゴルフをして、終了時点ではABCDFの最短だったが、Eに取り組んでいる間にBを取られてしまっていた。

消化不良なのでTOKI Regular Open Contest #17に出る。うっかりoj-bundleで展開する前のコードを提出しCEを出したのだが、これはペナルティになるらしい。ちょっとびっくり。

結果は1時間と少しで全完、全体3位だった。レートは2249→2439と+190した。多分次出たら赤だろう。このコンテストサイトでは赤は2500から。

少し誤読もあったが、Eまではおおむね問題なく進んでいき、Fでしばらく詰まっていた。この間にtouristが一気に全問正解してトップに立ち、すごいなあと言っていた。

Fはx日目に使用したらx+D日目に回復する、というのをマスク使用量の+1/-1で考えることにすると、左からの累積和をセグ木で持つことを思いつく。更新は右端までのrange add2回で(書いていて気付いたが、どう見ても1回でよい)、取得は左端からのrange maxkより大きくなる点を求めればよいが、これは二分探索でできる。ACLを使用するとlogが1つになるので、ドキュメントを見ながら書いた。あまり慣れていないが、かといって自前のセグ木を持ち出してlogを2つつけるのは少し怖い。

Gもrange addrange maxのセグ木だったが、今度は自前のセグ木を持ち出して解いてしまった。後から思い返せば、コードを使いまわすと実装量が減ったのにと少し後悔。これはFより簡単に感じた。

H問題はSum a_{i+r}*b_iをどうやって求めるかしばらく考えていたのだが、どう見てもNTT。気づくのがかなり遅かった。入力も実装もそこそこややこしくて頭が爆発してしまい、うっかり2^T回畳み込みを計算したのでTLEギリギリだったが、その後冷静になると畳み込みはT回でよいことに気づいた。システムテスト形式なら迷わずリサブだが、このコンテストはフルフィードバックなのでそのままにしておく。もし提出しなおしてそちらがペナルティに加算されたらたまったものではないため、触らないのが吉。

一時は上位10人中8人が日本人だったが、最終的には6人だった。侵略する側としては面白く見ていられるが、実際インドネシアの人たちはどういう気持ちなんだろう。

ラノベを1冊読んだ。

ABCのF問題の最短が更新されている。言語をRubyからPerlに変えると縮んだようだが、実行時間がギリギリであるので、少し変えて提出してもすぐTLEしてしまう。しばらくバトって、2時間ほどおいてまたバトっていた。この日記を書いている時点ではブレイクスルーがあって相手より-8Bしたものが最短となっているが、このあとどうなるかはわからない。

PCKを1問解いた。弱めのSingle Dotなので実装をコピペしようと拾いに行ったが、かなりややこしいので諦めて1から書き直した。

https://onlinejudge.u-aizu.ac.jp/solutions/problem/0292/review/5056511/kotatsugame/C++14

以前見たときは、中途半端な壁がないかわりに壁が座標軸に平行でない問題を解いた直後だったので、それと同様幾何のつもりで考えて面倒になって諦めたのだが、改めて見直すと幾何要素はどこにもなかった。

週記(2020/11/30-2020/12/06)

11/30(月)

真夜中(午前零時)、起きる。こんな時間に起きたらまた夕方眠くてしょうがなくなってしまいそう。

chokudaiさんがテレビに出るやつが昨日の夜放映されたらしい。直感的には出演者が全員胡散臭く見える。でも実はまともなことを言っているらしい。自分の偏見がすごい。新しいものがすべて胡散臭く見える。

キッチンに立って食事していたら、器をひっくり返してしまった。飛び散らかり方が微妙で、写真をupするのもあんまりおもしろくなさそうだった。さっさと片付けることにする。

先週の週記を書き上げて投稿。そのあと、AtCoderをしたりPCKを埋めたりラノベを読んだり淫夢実況を見たりしていた。

午前10時くらいにリクルートから電話がかかってきた。11/18の面接に合格したので、次の面接をセッティングするらしい。実は先週の金曜日くらいにも同じ電話番号から電話がかかってきていて、こちらは寝ていて取れなかった。

面接は1回で終わりだと思っていたので、次の面接があることを聞いて非常にびっくりした。結果を聞くだけだと思って飴を口に含んだまま電話に出たが、さすがにまずそうなので一言断ってかみ砕いた。

サインペンと白紙のメモ帳が必要らしい。本来はホワイトボードに書いたりするはずだったのかな。紙に書いて画面越しに見せるという用途なら、サインペンを指定する意味も分かろうというものだ。買いに行かなければならないと思っていたが、念のため部屋にある文房具を調べたところ、存在した。たしか実家に届いた何かの書類に署名が必要になって、書類と署名用のペンを実家から送ってもらったのだったか。

また昼までPCKを埋めていた。学食が閉まりかけたので、久しぶりに行く。生協の営業時間が15時までから17時までに伸びていてうれしくなった。学食は相変わらず14時から16時まで閉まるようだ。家に帰ってきて、また同じ行動を延々繰り返していた。つまり、PCKを埋めたりラノベを読んだり淫夢実況を見たりしていた。

じゃりみちさんのSatisfactory実況が完結した。毎回の更新を楽しみにしていた。始めから終わりまでずっと追い続けた実況シリーズはこれが初めてかもしれない。

Satisfactory、とても面白そう。かなり心惹かれるものがある。やむなくさんがプレイのスクリーンキャプチャを上げているのを見て内心羨ましがっていた。しかし僕は自分自身に家でゲームすることを禁止しているので、あまり深く考えないことにする。大体minecraftもまともに続けられないのに自由度の高いゲームは不可能。

夜、サークルの解説会に出る。今日はABC184。僕は今日は発表しないので、聞くだけ。終わった後にGoogle Driveに使ったスライドをアップロードしてもらったのだが、東北大学から発行されたアカウントで作成したファイルはリンクを作っても外部の人に見せられないようで、僕が個人アカウントで再アップロードすることになった。

解説会でAOJ-ICPCの600点の問題が紹介されていた。解いていなかったのでムキになって解いた。

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=5024092#1

かなり面白い。発想はかなり天才的であると感じたが、実装要素が多めなのでICPC感もある。

日付が変わる前あたりに布団に倒れこみ、そのまま寝落ちした。

12/01(火)

午前7時くらいに起きる。かなりいい感じ(真人間っぽいという意味)の起床時刻だが、睡眠時間を考えるともっと寝ておきたかった。11月が終わっていてかなりびっくり。11月、30日しかないことで有名。

作業用BGMとしてYouTubeで垂れ流していた音楽がそのままだった。一晩中流れ続けるBPM998。

知り合いの競プロerの作ったスマホゲームがリリースされていた(名前を出していいのかよくわからないのでとりあえず隠しておく)。ここに告知ツイートを貼っておく。

ゴミ出しをしてきた。11月分の読書記録集計をツイートする。今年は毎月やっていたけど、週記で取り上げるのは初めてかもしれない。

1日1冊は本当に難しくて、累積も計算していたらひどくみっともないことになってしまった。来年は「買った本<読んだ本」を目指します。

面接に関するちょっとしたアンケートに回答する。文章をうまく作れず、かなり苦労してしまった。ちょっとした、とは何だったのか。

PCKを少し進めてsolved 5500問に到達した。ここでいうsolvedとはrating-historyで集計できる分のことだ。

ラーメンズ小林賢太郎さんが引退したことを知った。かなりショック。ショックを受けた状態でいろいろ検索していたら、小林賢太郎さんが東京パラリンピック閉会式の演出を担当する予定だったことを知った。引退しても舞台裏での活動は続けるらしいので、担当を降りるということはないだろう(そもそもそうやすやすと降りれないとは思うが)。ちゃんと注意して観ておきたい。

それにしても、結局ラーメンズの公演には一度も行けなかった。最後となった第17回公演「TOWER」ですら僕が9歳のころだ。母や姉はどれかに行ったことがあるはずだが、どれだったか忘れてしまった。DVDが家にあったのでそれを観て育ったが、DVDに収録されていない公演やコントも存在するし、網羅できているとは言えない。

寝ながら問題を考えようと思って布団に入りハーメルンを読んでいたところ、午後6時くらいに寝落ちした。

12/02(水)

真夜中に起きる。yukicoderのアドベントカレンダーコンテスト1日目の解法をツイートしたあと、Twitterのトレンドに「小林賢太郎」があるのを眺めて感慨にふける。ほかにもいくつかラーメンズ関連のワードが急上昇しているようだ。僕の感覚的にはラーメンズはマニアックなコンビだが、こんなにもたくさんの人がラーメンズを知っているのだと幸せな気分になった。知らない人はYouTubeに公式でコントが100本もアップロードされているので、貪るように観よう。

www.youtube.com

モンスターハンターポータブル3rdの発売10周年らしい。僕の小・中時代を彩った最高のゲーム。CEROレーティングを気にしてはいけない。集会浴場のクエストは友達と行って全部クリアしたが、村クエの最後、「終焉を喰らう者」だけはどうしてもクリアできなかった。そもそも一人で上位個体に挑むような勇気もなかった。集会浴場のクエストはほぼ全て友達と複数人プレイでクリアしていた。

流しっぱなしだったYouTubeの作業用BGMを止めて、もう一度寝た。次に起きたら午前7時だった。かなり長い睡眠をとれて気分がいい。寝すぎたのか、少し頭痛がある。

最近部室が使えるようになったらしいので、活動計画書や感染対策の書類を提出する必要があるようだ。よくわからないので適当にそれっぽいことを書いて提出した。

週記(2020/11/09-2020/11/15) - kotatsugameの日記

これが受理されていたので、今日から部室の鍵を借りられるようになったようだ。結構適当に書いたつもりだが、何も言われなくて安心。ただ、今は部室にWi-Fiも飛んでいないし、部室を使うような用事はないだろう。

https://onlinejudge.u-aizu.ac.jp/solutions/problem/0354/review/5027552/kotatsugame/C++14

左下から右上へ並ぶ1列の白マスに配置された蟻の動きを考える。違う列の蟻は動きに関係しないので、個別に考えてよい。黒マスに配置された蟻は、先に1歩動かしておけば白マスに配置されたものとして考えることができる。

x座標の偶奇で分けて、それぞれ考える。x座標の偶奇が異なる蟻が出会うのは黒マスであるため、互いに干渉しない。

ここまで分類すると、残りは蟻の番号の様子を観察すればよくなる。ここで、盤面を右に45度傾けて考えると、蟻は互いにぶつかり合って交差しないため、番号の順番が変わらないことに気づく。あとは蟻の縦向きと横向きの個体数を数えることで、左から何匹は縦向きの移動で落下する、残りは横向きの移動で落下する、ということがわかる。ぶつかり合う蟻を互いに交差しているととらえるのは蟻本の由来ともなった超有名問題だが、それを援用することで落下する座標が得られるので、スタートの座標を引くことで落下するまでの時間が計算できる。

この問題を考察している最中、うっかりTwitterでゴキブリの動画を視聴してしまい、蟻だったイメージがゴキブリに変化してしまってつらかった。

問題を解いたりラノベを読んだりを繰り返していると、学食が閉まってしまった。そろそろ一度本屋に行っておきたいので、今日外出するのもいいかも、という気分になるが、昨日シャワーを浴びていないし夜はサークルで少し活動がありそうだしで何となく判断を保留にし、そのままラノベを読んでいた。結局家から出られず夕方になってしまったため、今日の外出はあきらめる。明日またチャレンジしたい。駅前まで出て行って、ここ最近とんと行っていない大きめの本屋に足を運びたい。

夜、サークルでこどふぉ #681 div.1のバチャを行う。3完だがペナルティが大量についてしまった。D問題は1時間考えてわからないので解説を読んだ。まず最初のステップ、つまり中途半端に取る数列は高々1つであるということの証明にびっくりした。そんなこと1度も考えなかった。しかしそのあとも難しい。

左と右から累積dp配列を持っておくのがよくある実装だが、左右のマージにO(K^2)かかって間に合わない。分割統治法というのを使うとよいらしい。

https://codeforces.com/contest/1442/submission/100206224

それっぽいコードを書いたらそこそこのスピードでACできてしまった。解析すれば確かに計算量的に間に合うことはわかるのだが、直感に反する。これで計算量が落ちていることはかなり驚愕の事実といった感じ。

月曜日から3日分の日記を書いて、寝た。

12/03(木)

正午くらいに起きる。メールを読むと、毎週ぐちぐち言っていた金曜日の課題が今週はすでに投稿されているようだ。今日やっておけば安心。しばらく布団でスマホを触っていたが、学食が閉まりかけたので行く。

帰りに生協で「放課後探偵団2」という本を買った。たしか1巻(そもそもシリーズ化される予定がなかったのか、ナンバリングはされていなかった)が出版されたのは10年くらい前じゃなかったかと思う。実際あらすじを読んでも10年越しの云々と書いてあるわけで、僕の記憶は正しかった。1巻は記録によれば昨年古本で買って読んだようだ。

昨日言及した通り、今日は駅前の本屋に行く。自転車を漕いで行くつもりだったが、どうにも空模様が怪しいので地下鉄に乗ることにする。交通系ICカードにチャージしていたら(この場合の助詞は「に」が正しそうだ)、電車を1本逃してしまった。10分くらい待つ。最近話題になった匿名ブログを読んだことを思い出し、この「電車の時間を調べずに駅に来る」行為のすばらしさに改めて思いを致していた。

待っていたら中高生らしき人が大量にホームに表れてかなりビビる。駅に来た時はそんな人影は道路にもなかったので、本当についさっき現れた集団なのだろう。一体何用だろうか。こんな人混みにいたらそりゃ感染るだろうという気持ちになる。

駅前の丸善に行く。まず一般書のコーナーに立ち寄る。特に何か買おうと考えていたわけではなかったが、宮内悠介さんの「あとは野となれ大和撫子」が文庫化されていたので買う。以前に「盤上の夜」を読んでから少し気にしている作家。また「虚構推理」のシリーズも以前から気になっていて、どうやらシリーズ3冊がそろって平積みされているようなので、いい機会だと思い買う。

ラノベのコーナーに行って新刊をチェックする。こちらは出版予定カレンダーをずっとチェックしているので、買うものは決まっている。丸善ラノベの品ぞろえはあまりよくないので、特に衝動的に買うものは見当たらない。手に持つのが少しつらくなってくるが、以前より興味を持っていた「文学少女対数学少女」が出版されているようなので、探す。検索機で見つけたので店員さんに案内してもらう。滞りなく入手。

紙袋に入れてもらったら思いのほか大きく、以降はずっと片手に紙袋を携えながら行動することになってしまった。

まだラノベの新刊を買い切れていないので、メロンブックスアニメイトゲーマーズをはしごして買い漁った。かなりお金を使ってしまっているので、衝動を抑えて素直にチェックしていたものだけ買う。

ブックオフにも行った。最近全然足を運んでいなかったので、かなり久しぶりに訪れる。ラノベコーナーが小さくなっていてびっくりした。あんまり買いたい本もないし、荷物も重いので、さっと出る。出るときにうっかり目に留まった本を2冊掴んでしまい、購入した。

本屋巡りは終わりにして、ゲーセンに行く。4時間くらいチュウニズムをプレイした。夕食を何にするか、そもそもこの荷物の多さですぐに帰らないのはどうなのか、など考えた結果、立ち食い蕎麦を食べた。

成果をツイートする。シャワーを浴びてからしばらくパソコンに向かう。

今朝確認した金曜日の課題を思い出して、やっておこうと課題ページを開いたところ、問題は講義用PDFファイルに記載されると書いてあった。これ自体は毎回書いてある文言なので深く考えていなかったが、冷静になると講義用PDFファイルは明日の講義開始時刻にならないと投稿されない。課題ページだけ先に作ったようだ。課題の存在を知らせるという目的なのだろうが、そもそも講義の時間を正確に守らせようという考え方が気に食わない。義務教育でやってろ。

かなり眠いので無理せず寝ることにする。就寝は午前零時半だった。

12/04(金)

起きてからしばらく布団でスマホを弄っていた。これ毎朝やってるな。午前10時くらいに起床報告して起きる。今日は面接の日。

起きた瞬間に課題のことを思い出した。期限まであと2時間くらい。内容は小テスト程度のものなので、十分間に合う。学食に行く前に取り掛かることにする。

思ったより時間を費やしてしまった。結局1時間半ほどかけた。二面体群に関する問題。詳しい行列の形を定めず、群論的な考察だけで証明しようと思ったのだが、うまくいかなかったので、あきらめて回転行列と対称移動の行列を書いて計算した。反転してθ回転させて再度反転するのは回転させるのに等しい、ということを簡潔に書くのはどうすればいいのだろう。ググったら三角形の合同を用いて証明したものが見つかったが、まず軸等の設定が面倒そうで参考にはしなかった。

12時近くになってしまった。この時間は昼休みと被っているので、学食が混み合う。昼は家で食べることにする。

エリュシオンに降り注ぐ雨www.pixiv.net

ぞうさんのイラストが投稿されていた。久しぶりに更新を見るな、と確認したところ、ほとんど1年ぶりの投稿のようだ。昔からかなり好きで、こぞうさんがイラストを担当したラノベもいくつか買っていた(最近も1作あったが、それは買っていない……)。

https://onlinejudge.u-aizu.ac.jp/solutions/problem/0378/review/5032279/kotatsugame/C++14

?(任意の1文字)を含む文字列のマッチングがFFTでできるという話を覚えていたので、試した。?0に、その他の文字をユニークな正整数に対応させて、Σ_{i-j=k}a_ib_j(a_i-b_j)^2を計算する。マッチするのと和の値が0になるのが対応する。bを反転して式を展開すると、それぞれの項がFFTで計算できる形になる。後からnoshiさんの話をよく聞くと、a_ib_jの部分は_!='?'でもよいらしく、値域を削減できるらしい。確かに。

最初は1行ずつマッチさせていたが、全然間に合っていなかったので全体をまとめ、間を?で埋めることで文字列を1行にし、一気にマッチさせた。解説を読むとbitset高速化らしい。言われてみればこういうbitsetで速くなる書き方ができるんだなあとなる問題だった。

リクルートの面接に臨む。一次面接とは違い、面接内容を第三者に共有することが明確に禁止されているので、内容には一切触れることはできないし、ツイートもしていない。ただまあ、

学食の夜の部の開始を待って、向かう。裸足にクロックスで自転車を漕いだところかなり辛かった。ただ靴下を履くのが面倒なのでクロックスは止めがたい。

「数字で救う!弱小国家」5巻を読んだ。月曜日に1、2巻、水曜日に3、4巻を読んで、これで現在刊行されている分はすべて読んだことになる。非常に面白かった。単純に異世界転生軍記ものとして面白い。ただまあ、数学要素には一切期待してはいけなくて、誤植(だと僕が思っているもの)が目についてげんなりした。せっかく図解として1ページ割いているんだから、その中の式くらいまともにチェックできなかったのか。

文学少女対数学少女」を読みかけるが、こどふぉがあったので出ることにする。C問題で信じられないくらい迷走した。上のほうでは正しいことを書いているのに、下の部分を書いているときには問題を誤解してしまっており、求めなくてよいものを求めるために必死に頭を働かせていた。その流れでD問題も誤読したまま実装まで終わらせてしまい、修正に時間を取られた。ただ、E問題が一瞬で解けたので、順位はそうひどいことにはならなかった。E問題は何がボトルネックになってしまうのかを考えると明らかなように思えた。木でdfsをするが、根だけ処理を変えることに気づくのに少し手間取った。

かなり眠くなってきたし、こどふぉはあまりよくない結果だったので、SRMを見送ることにする。布団に入ってからしばらくハーメルンを読んでいたが、眠気に耐え切れなくなったので午前2時頃就寝。

12/05(土)

午後1時頃、起床。夢を少し覚えていたので、夢日記を書いてツイートする。おおむね2パートに分かれていると感じていたが、前半の記憶はすでにほとんどなくなってしまっていた。

家に弁当がないので、本を読みながら今日の配達を待つことにする。いつ来るかわからないのでうかつに大便もできなくてちょっと困る。結局午後4時くらいに到着した。

さらに本を読み続ける。昨日読みかけになっていた「文学少女対数学少女」だ。本文中にいくつか古典ミステリの話が出てくるが、読んでいないのであまりわからない。別にわからなくても問題はないのだが、しかし読んでおいたほうが望ましいことも確かだろう。本に登場人物表が挟まっていてびっくりした。連作短編の形式で、主人公格3人以外が短編をまたいで登場することはほとんどないのだが、なぜ挟まっているのかわからない。中国語の人名は覚えにくいなどの話があるのかな。漢字を使ってはいるが、日本語話者にとってあまり直感的でない読み方、もしくは直感が働かない漢字が用いられているので、確かに頭の中で音にしつつ読むのは難しい。

今日はARC110。1時間ほど前にレジろうとしたら、いろいろな情報の入力を求められてびっくりした。これギリギリでレジろうとしてたら辛いな。企業スポンサードなARCであることを意識していなかった。よく見たら賞金もついている。

ARC110はABCDFの5完30位、パフォーマンスは2894でレートは2647→2675と+28できた。ここ3か月くらいずっと2600後半でウロウロしており、非常にもどかしい。

A問題はRakusay 1+[lcm] 2..+getを提出欄に直接打ち込んでそのまま提出した。ACできたからよかったものの、結局FAは取れなかったので、無理してサンプルを試さないリスクを負うこともなかったなという感想。2..get2..+getにした(getIntにキャストした)のは、Rakuの挙動を詳しく把握していないがゆえの安全策。結果的には必要なかった。例えばrangeの始点がStrだったらマジカルインクリメントを用いた展開がなされるので、困ったことになる。

また、コンテスト後に提出一覧を見て気づいたのだが、最大ケースに対応する答えを出力すれば他のケースの要件も満たすので、Textで解けてしまうようだ。これは気づかなかった。Raku[lcm]を使ったりとかなりシンプルかつ短く書けてしまうので、そこで思考がストップしてしまっていた。

D問題はコンビネーションの場合の数的な意味、つまりボールを選び出すということに注目してイメージを作っていくと解けた。最初少し迷走していたが、まあそこそこ速いACだったと思ってよさそう。

この時点でF問題のみACが出ていたので、とりあえず両方読む。Fを少し考えて、いつだったかに解いた「そーっとソート」を思い出すが、どうにもうまくいかなさそうなので、あきらめてEに向かう。

atcoder.jp

Eを30分くらい考えていたが、解けなかったので諦める。ABCの数値への対応のさせ方が悪かった。012と足し算・引き算ではダメで、123xorならばうまくいくらしい。そのあとのことは解説を読んでもよくわからなかったので今も放置している。

最後30分を切ったあたりでE問題に見切りをつけてFの考察を再開する。どうやらi=0を連打しているとそこそこうまくいくようだ。ある個所を連打するのは「そーっとソート」から得た着想。より具体的に言えば、i->P_iで辺を張るといくつかのループに分かれるので、全体が1つのループになればよい。

ループに分解した後、2つ以上に分かれたならば1回のswapでマージできる個所を探してマージする、できなければ-1を出力する、を繰り返すことにする。結果ループが1つだけのグラフが得られるので、心行くまでi=0を連打すればよい。これを提出したところ、あっけなく通ってしまった。Eを考えている時間さえなければもっと良い順位だったのに、と思ってしまうが、まあ全ては結果論。ところでこれはハックケースがある。

何回もswapしていたらこのケースもいずれ1つのループになれるが、1回swapしてダメだったら即座に-1を出力してしまうコードを書いていたので、僕のコードはこのケースで落ちる。

コンテスト後に残り少なくなった「文学少女対数学少女」を読んでいたら、「競技プログラミング」という言葉が登場して非常にびっくりした。

午前3時頃、読み終わる。非常に面白かった。数学の命題や定理、逸話を作中作と対応させるという試み、また対応させる方法が面白かった。本文中では古典ミステリーばかり取り上げられていたが、あとがきや解説で触れられる本や作者は最近のものが多く、僕でも知っている・読んだことがあるものの名前が登場して嬉しくなった。まあミステリ評論自体は相変わらずよくわからないわけなのだが。例えば僕は青崎有吾さんの代表作「裏染天馬」シリーズを単純に学園ミステリの一つとして何気なく読んでいたわけだけど、この方は「平成のエラリー・クイーン」として高く評価されているようだ。

(溜めてしまっていた)日記を書いて布団に入ったら午前8時くらいだった。ハーメルンを少し読もうと思ったら信じがたいスピードで寝落ちした。

12/06(日)

午後3時ごろ、起床。明日は1限の時間から4年セミナーの説明会があって、参加する必要があるのだが……。

食事をして、サークルにメールが1通来ていたのを返信する。一瞬どんなメールが来たのか書こうとしてしまったが、それはいけない。こちらからは、プログラミングを学ぶ手段としての競技プログラミングについて(聞かれてもないのに)語ったメールを返信した。こんな感じの文章だ。

ほかの部分も含めて結構頑張って推敲していたら、メールの返信だけで1時間くらい使っていた。びっくり。

少しPCKの問題を解いたほかは、ラノベを2冊読んだ。1冊目は「お見合いしたくなかったので、無理難題な条件をつけたら同級生が来た件について」という本。内容はさておき、あらすじには特に書かれていなかったが、設定が結構特殊だった。普通の現実世界(恋愛)ジャンルの話だと思ったら、作中では結婚可能年齢が男女とも15歳に引き下げられていた。あと、登場人物が軒並み名家の御曹司・令嬢だった。この2つの設定はどちらも単独で主人公がお見合いをすることの理由になりうるが、2つ合わさっても別に最強には見えない。その設定両方いる?

2冊目は「元スパイ、家政夫に転職する」。展開がいちいち好みで良かった。主人公が目立つ・注目を浴びるシーンが好きで(これ以前の週記でも書いたと思ったけど見つからなかった)、その観点から言ってこのラノベはそういうシーンがかなり出現するので良い。

解けたはいいけど実装が面倒な問題があって、コードの設計を練っていたのだが、こどふぉ30分前になってしまったのであきらめてシャワーを浴びた。今日はCGR12で3時間。明日朝早いけど気にせず出る。CGRは皆勤。

ABcCDEFhを解き、システスもすべて通って37位だった。レートは98上昇し、2707になるようだ。

AとBはギャグ。Aはなぜかかなり面倒な実装をしてしまい、5分もかかっている。Bもギャグに気づくのに3分くらいかかってしまった。

C1は非常に難しかった。盤面の配置に依存する方針で解くとまずそうなので、そうでないものを考えた結果、i+j mod 3で分類することを思いついた。念のため必要ないマスは変更しないような実装をした後、提出直前に少し考えていたら、そういう余計な実装をしなくていいことに気づいてしまった。妙な場合分けはバグの温床なので削除するか考えたが、書き直すのが面倒でそのまま提出した。C2も同様の方針で解けたが、ここでもしばらく迷走してしまった。

Dもパッと見難しいが、数列の先頭と末尾をチェックして縮めていく感じで解けそうだったので、実装したところサンプルが合ったのでそのまま提出。あまり深く考えていなかったのでシステスが非常に怖かった。

EとFのsolved数が逆転していたのでFを読む。同じ数が隣接しているところで切って、繋げなおす。繋げるときに端の文字が同じだとダメなので、その時は片方を引きちぎって挟み込むことになる。引きちぎる回数を最小化したい。一切証明していないが、こういう同じ数だとダメみたいなやつは出現回数最大とそれ以外の2種類に単純化しても変わらないことが多いので、今回もそうだろうと決めつけた。

Eは最小の点を決め打って最短経路を計算すればよさそうだったので実装したが、WA。しばらく考えて、ロジックに誤りが見つからなかったので途方に暮れてコードを開いたところ、配列サイズが小さかった。アホくさ。

また順位表を見て、solved数に従ってH1に行く。ほとんど諦めモードだが、配点だけ見ればFと同じ問題。まず、なんちゃって証明とエスパーを駆使してDPに落とし込む。遷移をよく見ると、DP配列を+1/-1ずらすのと1つ飛ばしで隣り合う項の和を取る操作の2種類に単純化できることが分かった。ずらすのは先頭indexを持っておけばよくて、和を取る操作はパスカルの三角形になる。最後にDP配列を復元する。サンプルが合ったので提出したら通ってかなりびっくり。そのあとしばらくして、分母が0になり得るかもしれないと思って真っ青になったが、実装上modint(0).inv==0だったので助かった。冷静になると、制約から分母は0になりえない。

大成功して気分がいい。日記を書いていたら午前4時になってしまった。明日は8時50分からzoomで説明会。どうして……。

週記(2020/11/23-2020/11/29)

11/23(月)

先週日曜日、週記を投稿してからの話。まずサークル解説会のスライドを生やした。ABC183のBCD問題だ。問題概要を書かず問題文を読んでくれと言ったりなど手抜き感はすごい。

これはlcm(m,m')と等しいらしい。全然わからんかった。

週記(2020/11/16-2020/11/22) - kotatsugameの日記

testestestさんから「n/gcd(n/m,n/m')=lcm(m,m')n-min(n-m,n-m')=max(m,m')と比べると自明」との考え方を教えてもらった。なるほど~。

布団に入ってなろうの更新を確認したところ、ついに「Game of Vampire」が完結していた。

syosetu.org

めちゃめちゃ長いがめちゃめちゃ面白いので、かなりおすすめ。実際のところ(これはおすすめのなろう小説まとめにも書いたことだが)ヴォルデモートが死ぬまでが一番面白く、そこで一段落つく感じはあるので、そこまで読むのでもいいかもしれない。それでも半分強、300話くらいになるが。僕はこの一段落ついたところで新しい舞台・展開に移行するのに耐えるのが苦しかった。それまでの話が心にこびりついていたのだ。

そのあと別のなろうを読む。先週月曜日から読んでいた「サイレント・ウィッチ」だ。

https://ncode.syosetu.com/n8356ga/

これをずっと読んでいたら昼過ぎになってしまい、そろそろ寝ないとな~と思っていたらKing of Performai 2020 DAY3の生放送が始まった。今日はチュウニズムの大会らしい。見たい!小説家になろうも読みたい!どうしようもないので、今日は寝ないことにする。結構久しぶりの徹夜。僕の認識的には日曜日で月曜日がつぶれた形だが、先週の週記はもう投稿してしまったため、こうして月曜日の部分を作った。

スマホの画面を上下で分けて、生放送の画面を見つつなろうを読む。プレイが始まったら生放送に集中して、それ以外の時間で読み進めていく。炎上2落ちと大鳥居9950で開いた口が塞がらなかった。ガラクタとパッソ2曲で-73というスコアは、これだけでご飯3杯はいける。チュウニズムがマジで上手い人たちはチュウニズムがマジで上手いということが分かった。

生放送が終了した後眠気に耐えつつ「サイレント・ウィッチ」を読み切る。面白かった。ただまあ、チート無双が大好きな僕としては正体を隠してどうこうする系の話は正体を明かした後の周囲のモブの反応をもっと見せてほしいという希望がある。クライマックスで明かすというのは劇的ではあるが、その後の話が存在し得ないため悲しい。とはいえ面白かったのは間違いない。

信じられないくらい眠いが、午後8時のサークル解説会まで起きている必要がある。後日譚を読もうとしたらたった2話なのに意識を飛ばしまくってかなり時間がかかってしまった。これはまずいということでシャワーを浴びると、少しマシになった。食事などをして時間を待つ。先週考察を済ませたけど実装してなかった問題を1問通した。かなり面倒くさい感じだったが、考察ができてからしばらく時間をおいた結果実装が頭の中に出来上がっていたため、なんとか書ききれた。

サークル解説会。多少目が覚めたので、発表も考えていたことはしゃべることができた。午後9時からコンテストがあるらしいので、早めに終了。解説会で使用したスライドを外部に公開してはどうか、という意見が以前出たので、これに対応する必要がある。さっきまではすぐにでも寝て明日やろうと考えていたのだが、解説会が終わった今微妙に眠気が醒めているので、やってしまうことにする。

まずサークルで共有のGoogle Driveにフォルダを作成し、解説スライドを置く。次に公式サイトで記事を作成し、Google Driveに置いたスライドそれぞれへのリンクを貼る。ここまでやってホスフィンに確認してもらったところ、いくつか改善すべきところがあるらしいが、正直よくわからないので全部ぶん投げた。

puzzleknot.org

最終的にこんな感じになった。こういう記事が毎週増えていくことになる。

これ面白いな。同じ問題を何度もACしたとき、それらが全部集計された場合のグラフは初めて見た。こんなことになっているのか。微妙なところだが、6月から2か月ほどは傾きがいくぶん急で、最近は逆に傾きが緩やかであることが見て取れる。

午後10時、寝る。

11/24(火)

朝結構早い時間に起きて、二度寝をしたりなろうを読んだりした後、空腹に耐えかねて午前9時に起床報告をした。

最近、ホスフィンにおすすめされて焼そばバゴォーンというカップ焼きそばを買った。ちょうどいいのでこの時食べてみたのだが、ペヤングとの味の違いが判らなかった。わかめスープも、別に湯切りのときのお湯で作るといったことは書いてなかったので、一般のインスタントスープと同様に別にお湯を沸かして作った。カップ焼きそばとインスタントスープを別々に買ってもいいのではないだろうか。

ペヤングでいいじゃんという結論に達しそうになったのだが、調べたところ焼そばバゴォーンのほうが安いらしいのだ。またペヤングはサイズがn2nとそれ以上しかなくてちょうどいいサイズがないが、焼そばバゴォーンはいい感じのサイズ感だった。カップ焼きそばに味の違いは存在しないため、まあこれを買ってもいいのかな。

かなり眠いので布団にダイブする。明日提出のレポートが存在するが、一切顧みず布団でyoutubeを見たり本を読んだりしていた。寝てしまうと生活リズムが大変なことになるので、そうやすやすと意識を落とすわけにもいかない。今日はAtCoderをプレイしていないな、と思いパソコンの前に戻ってしばらくキーボードを叩いていたりもしたが、レポートを書く気はない。

この実装は頻繁に使う。そもそも動的にサイズを増やせる2次元配列というのは高級すぎる概念のため、サポートしているプログラミング言語は限られる。その限られたプログラミング言語が世の中のシェアのほとんどを占めているというのも事実なので、実際これができない言語はあまり使われなさそう。ほかにも、例えばPascalだとArray of Arrayを使って毎回setlengthを呼び出すことで似たようなことができるが、いかにも面倒そうだ。定数倍も気になる。

そんなときに、上のツイートのテクニックは非常に強い味方となる。何せ固定長の配列が3つだけでよいのだ。僕はこれを自分で考えて使っているが、似たようなものは何度も何度も再発明されてきたことだろう。これより効率のいい書き方はあるのだろうか。辺を読み込んでから一気に処理するとかすれば、シーケンシャルアクセスも達成できたりしないだろうか。僕がこのテクニックを使う言語はそういうキャッシュヒットの定数倍が問題にならないくらい何もかも低速な言語なので、全然考えていない。

途中外から爆音が聞こえてきて敵襲かと思ったが、よく聞いてみると花火の音だった。検索しても仙台市で花火をするような予定はなさそう。謎である。

再度布団に入り、本を1冊読み切った。「君を描けば嘘になる」という本だ。「アート」と「才能」の話。これの数か月前に文庫になった「彼女の色に届くまで」という本も同じテーマの話だった(こちらは似鳥鶏さんの作品で、ミステリ色も強いが)。非常に面白かったので、それからしばらくはアート関係の小説に敏感になっていて、その流れで購入を決めた。

「君を描けば嘘になる」もとんでもなく面白かった。読み終わってから感情に整理をつけるまでしばらく身動きができなかった。

布団で動けなくなったままTwitterをしていたが、いつの間にか寝落ちした。

11/25(水)

午前5時、起きる。二度寝したいような気分になるが、よく考えれば今日提出のレポートが手つかずである。観念して起き上がり、食事してからレポートを書き始めた。

途中小説家になろうの更新を確認したりシャワーを浴びたりしながら、6時間弱かけて書き上げる。1問は解くのをあきらめた。「標本化定理」を応用した実社会の技術を(CD以外で)挙げよ、という問題。実社会のことを意識しながら生活したことがないためこういう系統の課題はほとんど不可能。

最後時間がなかったのでWolframAlphaに投げて帰ってきた答えをそのまま書いてしまった。sgn関数が出てきて難しそう、と思って理解するのを諦めたのだが、リプライで教えてもらった。どうやら典型的な広義積分の公式で1発らしい。積分難しすぎる。

レポートを提出する。山の上の研究室まで行って提出しなければならないらしい。

週記(2020/11/02-2020/11/08) - kotatsugameの日記

これと同じ講義のレポートで、今日も山の上に登る。途中道の長い区間が片側通行になっていて、待ち時間が発生し微妙に時間がヤバくなってしまった。300という表示を見て5分!?と目の玉をひん剥いてしまったが、3:00だった。3分も十分長いぞ。こういう片側通行の待ち時間の相場がわからず、前から車が来る様子もないし、後ろに別の車が待っているし……ということもあり、実は無視して進むのが正解なのではないか、と、待ち時間は戦々恐々としたまま過ごした。

たいぺーと合流してレポートを提出、食事して別れた。たいぺーはゼミらしい。僕はそのまま山を降り、川内キャンパスで床屋に入った。

家に帰ってポストを見ると、花火のお知らせが入っていた。近くの高校で上げたようだ。昨日の花火はどうやらこれらしい。前もってお知らせされていたのに、ポストを確認する習慣がないため気づかなかった。ところで、この情報から僕が住んでいる場所をある程度絞ることができる。学食の行き帰りのツイートなどを注意深く観察すれば同様の情報は得られるものだと考えているので、気にせずインターネッツに大公開している。

bcで1000ACした。

1000ACの言語はこれでC++AWKJuliaPerlRubyPascalに続く7個目だ。bcはかなり苦労した。正直800ACのあたりからもう増えないだろと考えていたのだが、実装が嫌なだけでやれば解けるという問題は探せばまだ存在した。ARC-Bなどは実装してみてTLEするかしないか確認するゲームになっている。昨日紹介した、固定長配列3本でグラフの隣接リストを保持するテクニックもかなり使用する。

布団に入ってなろうを読む。1作追いついた。

https://ncode.syosetu.com/n2477fb/

これを読んだ直後あたりに今年のJOI一次予選(第3回)の問題が公開されたことに気づき、急いでパソコンの前に座ってコードを縮めた。今回も公開された直後に気づくことができてほっとした。現在3問すべての最短コードを保持している。

今日、というか明日朝までのレポートが1つ残っているので、書く。レポートとは言ってもほんの小テスト程度の内容なのでササッと終わらせる。

そういえばネットオフという古本サイトで使用できるクーポンが明日までのようだ。9点以上購入で10%オフ、20点以上購入で15%オフ。いつか買おうと思ってお気に入り登録だけして放置していた本をカートに入れる。1万円くらいになった。クレカ支払いでなければ受けられないサービスがあり、僕はクレカを持っていないため、父に電話してクレカ番号を教えてもらう。1万円は高すぎるだろうという指摘を受けて、シリーズを1つ諦めることにした。すると今度は3000円を割り込んで送料がかかるようになってしまったため、別の作品を再度追加して4000円程度にした。

これを書きながら、以前は「立て替えてもらう」という認識だったのが、いつの間にか「買ってもらう」になってしまっていることに気づいてびっくりした。甘えすぎである。自分でも十分出せる金額なのだから、ちゃんと「立て替えてもらう」という認識で臨めばシリーズを1つ諦めなくてよかったのに。何らかのお祝いで数度「買ってもら」ったことがあって、それを意識してしまっていた。

父がテレワークで使う用にモニタを1枚買うつもりらしい。端子がいろいろあってややこしいのでお店の人に聞くのが一番であると答えた。僕の実家の自室においてあるモニタを1枚使って感覚を試してみては、ともアドバイスした。そのあと椅子に突き刺さって寝ていたらもう一度電話がかかってきて、モニタが映らないとの相談を受けた。遠隔でパソコン系のやり取りをするのは難しいことが知られているが、何とか頑張る。

まずディスプレイ設定を開くと、モニタを認識していなさそうな感じがする(後から考えれば、この時すでに認識していたかもしれない)。モニタの電源をつけると、「DVI NO SIGNAL」という表示が出る。ケーブルを見せてもらうとHDMIで接続しているので、これはおかしい。このときケーブルを(端子は同じだが)別のものに交換した。ググってみるとモニタの入力端子は切り替えなければならないようなので、モニタの下についているボタンを見せてもらう。それっぽいマークがついているボタンをいじってもらうと、何の拍子にか「HDMI NO SIGNAL」という表示に変わる。ケーブルを元のものに取り換えていると、見事映った。おそらく再起動か再接続が必要だったのだろう。

無事解決できてハッピー。通話を終了する。眠気が覚めたので日記を書いていた。昨日は寝落ちしたし、月曜日も眠くて書けなかったので、3日分を一気に書いた。

布団に入って少しハーメルンを読み、午前3時くらいに就寝。

11/26(木)

午前9時、起床。ARCで青パフォを出す夢を見て飛び起きた。最悪の目覚め。

布団に横になったままラノベを読む。夏に買いあさった古本のうち1シリーズ。「ゾディアック・ウィッチーズ」という題名で、2巻で打ち切りのようだ。特に受け入れがたい文章や設定はないが、あんまり記憶にも残らない。正体・実力を隠している主人公が、それをヒロインにも明かさないままシリーズ打ち切りを迎えていて世知辛い気分になった。

新刊で買った本でも特に記憶に残らず2巻で打ち切りになるようなものは沢山あるが、やはり「打ち切りになるかもしれない」と「打ち切りになってしまった」の間には大きな隔たりがある。「打ち切りになってしまった」という情報を念頭に作品を読んでもあまり楽しめないということに気づいた。まあ本棚を埋めるために買っているようなものなので、特に問題はない。辞めるつもりもない。

積読を消化して気が抜けたのか、布団に転がってハーメルンを読んでいたら寝てしまった。次に起きたら午後10時だった。およそ8時間寝た。

別のラノベを読みつつ、午前1時からのSRMに向けてシャワーを浴びたり食事を摂ったりしていたが、開始1時間前にコンテストが中止になってしまった。

手持ち無沙汰になる。うっかり5chまとめサイトを訪れてしまうが、強い意志でページを閉じてyukicoderを少し進める。星3を埋めていたのだが、初手がわからない問題がいくつかあって考える気を失い、後回しにしてしまった。

合間合間でラノベを読んでいて、また古本の1シリーズを読み切った。「リベンジ・オンライン」。2巻で打ち切りである。イラストを担当しているのが魔太郎さんという方で、それを目当てに購入したところ、本文がひどかった。母親への悪口で貧乳という語彙が出現するのが耐えられなかった。まあ読み切ったんですが。

イラストレーターで選んだラノベはあんまりおもしろく感じられないという自説があって、古本だとそれも一入といったところか。設定に一切興味が抱けなかったのも問題である。これから古本を買うときはちゃんとあらすじを確認したい。「ゾディアック・ウィッチーズ」のほうはちゃんとあらすじを確認してあり、少し興味が惹かれたため買っている。

夜が明けた後もずっとyukicoderを進めていた。かなり定数倍高速化を頑張って手元では十分通る速度が出るようになったのに、yukicoderでは通らないというコードがあって悲しい。想定解でないことは確かか。f(A_i,B_j)をたくさん計算しているが、最悪ケースはABも同じ数ばかり並んでいるので、それをメモ化すれば通りそう。fの計算に時間がかかるようなABの組もそう数はないので、まあ通りそうな解法ではあるが、ちょっと悔しいし今日はあきらめることにしよう。

昼前におなかがすいたのでパックご飯を食べた。間に8時間寝ていたけど、それを勘案しなければこれで今日は4食目となる。パックご飯・パスタ・パスタ・パックご飯だ。ちょっと危機感を覚える。野菜を摂るのが本当に難しい。サラダとかあればいくらでも食べるんだけど、用意できないためない。

布団に入って新しくハーメルンを読み始める。昨日まで読んでいたものはどうにも合わなかったので諦めた(「偽聖女クソオブザイヤー」という作品だった)。

東方帽子屋 - ハーメルン

午後2時、寝る。昼寝のせいで生活リズムが一瞬で逆転してしまった。ちなみに、毎週気にしていた金曜2限の課題は、今週もないようだ。

11/27(金)

午後11時、起床。yukicoderに寝坊した。これは不味い。明日配達される生協の弁当を受け取れないかもしれないし、ARCに寝坊してしまうかもしれない。今日の就寝時間で何とかずれを戻さなければならない。

TechFULの結果が出ていた。全体7位で1000円ぶんのアマゾンギフト券がもらえるようだ。

そもそも解法を得るのに1時間以上かかってしまっていたため、別にREがなくてもそんな良いスコアではなかったかもしれない。それはともかく50000回の再帰でREを起こすような環境で競技プログラミングのまねごとをさせられたのが本当に気に入らない。

週記(2020/11/16-2020/11/22) - kotatsugameの日記

当時はかなりキレていたが、ふたを開けてみれば同じところでハマった人は僕だけではないようだし、ほとんどやるだけの問題たちをなぎ倒して金銭が得られると単純に気分がいい。次回も出たい。ゴミカス環境であることさえ前もって覚悟していれば、何が起こっても競技プログラミングじゃないしな、という気分でとらえられるかもしれない。

水曜日に注文した古本が発送されたらしい。土日は配達業も休みなのかな。通販でものを頼むと届くまで毎日そわそわしてしまう。配送追跡サービスなども毎日確認してしまう。届いたらまた写真に撮ってTwitterに上げよう。本棚の余裕も十分である。

yukicoderのupsolveをする。D問題は蟻本に載っているかなり典型的な最小費用流。E問題は最近AtCoderで出題されたFiguresとの関連性があるらしいが、両方何もわからない。つらい。解説を見るのももったいなく感じてしまう。

PCKの問題を少し進めつつラノベをまた1シリーズ読んだ。「サ法使いの師匠ちゃん」2巻で打ち切りだ。結構面白かった。キャラもかわいらしくていい感じ。そのあと「りゅうおうのおしごと!13」を60ページくらい読んで、寝なければと思い切り上げた。

午前11時くらいに布団に入って、さらにしばらくハーメルンを読んでいた。午後1時就寝。

11/28(土)

生協からの弁当の配達のこともあって眠りが浅かった。午後4時に目覚ましで目を覚ます。これから2時間のうちどこかで配達が来るので、それに対応するために起きている必要がある。先週はかなり早く来たのでそのあとすぐに寝られたが、今日はどうなるだろうか。ちゃんと睡眠時間を確保するためにも毎週早めに来てほしいものだ。

結局、午後4時半くらいに来た。微妙に意識を落としていたが、問題なく反応できた。受け取ってまたすぐ寝る。次に起きたのは午後7時半だった。これも目覚ましで起きた。

食事をとってシャワーを浴び、ARCに向けて準備をする。具体的には提出言語をC++に合わせるために適当な問題に提出しておく。

ARC109は4完184位でパフォーマンス2304、レートは2680→2647と-33してしまった。

3完までは非常にスムーズにいって、確か10位くらいだったと思う。B問題を証明していなかったが、当時はそのことに気づいていなかった。今考えるとどうして何の疑いもなく提出したのか結構謎である。

Dは見た瞬間に始めと終わりをいくつか全探索するだけの問題だと思って、ICPCみたいな問題だなと思いながら迷いなく重実装に突っ込んでいった。実装方針を決めた後順位表を確認してもあまり通されていなさそうだったので、安心してネットリ実装をしたがWA。結局3回もWAを出してしまった。そうしているうちに、みるみるDのsolvedが増えていった。AtCoderのペナルティシステム上、Cまでがいくら速くてもDがこうも遅いと順位は崩壊してしまう。精神も崩壊しかける。

残り30分あたりでEにも目を通してみたが、パッと見てよくわからなかったのでDのデバッグを続ける。全探索する範囲を増やしてもWAは取れなかったので、そこ以外の部分だろうとあたりをつけて、マジックナンバーを確認したりしていたが、結局始めと終わりをつなぐ部分の計算が間違っていたことに気づいた。これを修正してAC。残り20分くらいのことである。

Eにチャレンジする。焦っているので適当なエスパーをして実装してみる。エスパーしたくせにその考察も紙の上で詰めていないため、ひたすら合わない。コンテストが終了してから数分後にサンプル1が合ったが、サンプル2以降は当然のようにWAだったので投げ出す。

解説を読むと、ネットリ系問題だと思っていたDは考えもしなかった方針で実験結果をプロットして規則性を明らかにしていた。重実装やるだけだと思った瞬間にすべての考察を打ち切ってしまったが、なるほどちゃんとARCらしい問題ではあったのか。ARCらしさというのもまだつかみ切れていないが。

Eはエスパーで解いた人が多いらしい。どうしようもない。キレたい気持ちもあるが、結局Dに80分以上も費やしてしまった時点で負けは確定であった。かなり精神が終了してしまった。

昨日読み止しにしていた「りゅうおうのおしごと!13」を読み終えた。今巻は短編集のような位置づけ。一般的なラノベシリーズの短編集というのは、ナンバリングが半整数だったりそもそも別シリーズとしてカウントされたりしがちで、さらに構成も「特典小説など」+「書き下ろし短編」が列挙される感じのものが多いが、「りゅうおうのおしごと!」シリーズの短編集(8巻と13巻)は「書き下ろし短編」の中の話として「特典小説など」が挟み込まれるタイプで、他には見たことがない(覚えていないだけかもしれない)。特典小説とは言っても、どれもドラマCDの台本の小説化のようでボリュームがある。

内容についてだが……正直あまり楽しめなかった。これは作品が悪いのではなく、僕の精神状態が最悪だったため。読むタイミングを失って9月からずっと積んでいたのだが、今読むのはちょっともったいなかったな。

ノムリッシュQVC福島や淫夢実況などを視聴していくらか精神が回復した。

11/29(日)

土曜日の日記を書いて、寝たのが40時だったので、日曜日が消え失せてしまった。代わりに、日記を書いてから寝るまでのこと(狭義日曜日のこと)をここに書いておこうと思う。

ICPC国内予選参加記には「サークル運営としてのICPC参加記も書きたいと思います」というようなことを書いていたが、実際にはまだ書いていなかった。Twitterのbioで管理しているToDoリストに残りっぱなしなのもよろしくないため、書いた。

kotatsugame.hatenablog.com

同じ内容のものをWordでも作成して、サークルのGoogle Driveに保存してある。ICPC準備のメモとしては昨年碧黴さんが残したものがあるのだが、まあこんなのなんぼあってもいいからね。今年は変則的なので、来年の役に立つかは知らない(役に立たないでほしい)が、やったことリストは参考になるだろう。ちなみに最初は日記の部分だけ書いて終わりにしようと思っていたが、読み返すと内容が一切まとまっていなかったので慌てて追加した。日記は時系列順なので、相互関係が把握しにくい。僕は把握した状態で書いているので、何も知らない人が読んでわかる文章になっていることは保証できない。

淫夢実況を見ながらラノベを読んだりレポートを書いたりする。

「あドーナッツみっけ!(全22件)」 honeさんのシリーズ - ニコニコ動画

レポートはいくつかある問題のうち2問選んで解く形式のやつだ。全然わからないものとほとんど自明であるように感じられるものの2極化が激しい。配点が違うらしいので、できれば難しい問題を解いておきたいのだが、解けないものはどうしようもない。

メビウスの輪とS1ホモトピー同値であることを示そうとしたが、適当に定義した写像の連続性に納得がいかない。メビウスの輪X=[0,1]x[-1,1](0,y)~(1,-y)で同値関係を定めたときのX/~で定義されているが、商位相に関する感覚というのがほとんどなくて困る。開集合を取ってきて示すのもただただ面倒なのでやりたくない。

こんなふわふわした回答を提出しても殺されないかな?と心配していたが、レポート提出に関する取り決めをよくよく確認すると、問題のカウントの方法を間違えていた。例えば練習問題1.2の(1)から(7)はそれぞれを1問とカウントするらしい。2問より多く解いても最初の2問しか成績に反映されないようなので、レポートに「これとそれを成績に含めてあれは含めないでほしい」といったことを書いておいた。どんなに論理が穴だらけでも成績に含まれなければOK。

ところで、最近ほとんど文章を手書きで書かないため、字が明らかに下手くそになっている。もとから下手くそだったが、さらに悪化している。筆圧の制御ができず、かなり太い線で書いてしまう。ぐしゃっと固まって縮こまった字を書いてしまう。ペン先を紙面からうまく離せず、画がずっと連続してしまっている。

honto.jp

この本がかなり気になっている。

水曜日に注文した古本が届いた。これを待つために起きていた部分もある。

冷凍庫にでも入っていたのかと思うくらい本がヒエヒエで面白かった。この写真を撮るときに左端の本が1度倒れてしまい、その結果近くに置いていた本の帯に折り目がついてしまって悲しい。

午後4時からこどふぉdiv.1があるが、寝る。布団に入ってからしばらくハーメルンでも読もうかと思っていたのに、実際は一瞬で寝入った。

ICPC国内予選 2020 サークル運営記

2020年は新型コロナウイルスの感染拡大で前期のいかなる活動も壊滅的だった。ICPC国内予選も例にもれず、開催が11月に延期された。JAGによる夏合宿も消滅したが、模擬国内予選は例年通り国内予選の2週間前に行われた。

また、予選のルールも大幅に変更された。最も大きなものとしては、マシンが1人1台使用できるようになり、ライブラリのコピー&ペーストが許可された。

日記

サークル:競技プログラミングサークルpuzzleknotのこと

研究室:サークル顧問の先生の研究室のこと

8/24

ICPC国内予選の日程の告知と参加意思のアンケートを取った。

4・5限の公欠届が発行されることも伝えた。(このとき時間帯はまだ決定していなかったが、例年通りであると思い込み5限と明言してしまった。)

9/12

参加意思を示した人に対して、チームをすでに組んでいるかどうかのアンケートを取った。

顧問の先生にコーチを引き受けてくださる方を探してもらうようお願いするメールを送った。この時同時にサークルから参加する予定の人数を伝え、研究室との間での人数調整を図った。

9/13

メールの返信が来て、コーチが決定した。研究室はまだ参加チームを決めていないそうなので、人数調整はこれからとなる。

9/23

コーチからメールが届いた。研究室からは8名参加することになった。サークルからは現在19名が参加意思を表明しているので、ちょうど3の倍数になった。ここで8/24のアンケートを締め切る。

9/28-10/02

コーチとメールのやり取りをして、合同チームに関して決めた。すでにチームを組んでいる人を除外したサークルメンバーのレーティングを一覧にしてコーチに送り、研究室のほうで話し合ってもらった結果、研究室から2名とサークルから1名の合同チームを組むことに決まった。それぞれのメールアドレスを伝え合い、あとは当人間で連絡を取ってもらう。

また、国内予選への参加場所の確保をお願いした。今年はチームがバラバラの場所から参加することも認められているが、例年と同様できるだけ集まって参加することに決めた。

10/02

これまでサークルSlackのannouncementsチャンネルでアンケートを取ったりしていたが、専用のチャンネルとしてping_icpc2020を作成し、以降そこでやり取りすることにした。

ICPC公式サイトで個人アカウントを作ってもらった。使用したメールアドレスを集めるためにGoogleフォームを使用した。

サークルでまだチームを組んでいない人たちを組み合わせ、チームを決定した。チーム名を決めてもらう。ICPCアカウント登録と合わせて、締め切りを10/09に設定した。

10/07

締め切りのリマインドをした。

10/08

全員のアカウント登録が済み、全チームのチーム名が決定したので、まとめてコーチに送信した。

模擬国内予選について周知した。チームごとに申し込みを行ってもらう。

10/13

コーチによってチーム登録が行われた。正しいチーム名であるかの確認と、情報の登録をしてもらう。終わったらSlackでリアクションをつけてもらった。

情報の登録はややこしいので、まず自分で終わらせて、スクリーンキャプチャを参考として公開するのがよいだろう。

Number of Full-Time STEM Semesters Completedという項目が新しく増えていた。おそらく、理工学部であればこれまでに完了したセメスターの数を書けばよいはずだ。

10/19

情報追加の締め切りは10/26だが、早めにやってもらいたいのでリマインドをした。

10/20

公欠届が必要な人は、Slackのチャンネルに書き込むようお願いした。昨年と異なり、今年はフォームを使用しなかった。公欠届がどの程度効力を持つかは教員次第なので、気になる人は確認しておくよう伝えた。

10/20-10/22

情報追加が完了したので、コーチに確認してもらった。数人足りない人がいたので、2回くらいやり取りして埋めきった。

10/21-10/22

公欠届について顧問の先生にメールを送ったところ、PDFファイルを印刷して署名・押印した後再度スキャンして送り返してくれるとのことであった。その形式でよいか公欠届の発行を希望した人に確認を取り、改めて作成した公欠届のPDFファイルを送信しておいた。

また、顧問の先生が担当する講義に対して公欠届を発行する人が3名いた。彼らに関しては書類を用意せず、直接伝えるだけで済ませた。(昨年、書類を用意しなくてもよいと仰っていた。)

10/22

参加場所について、研究室の部屋に全チームが集まるのが厳しいと連絡が入った。これに関して、研究室の人々とサークルのメンバーが一堂に会するSlackワークスペースが設立され、サークル各チームから1名以上が参加することになった。以降はメールではなくここで連絡を取り合った。

顧問の先生から、研究室の部屋を使用して出場できるチーム数や、ほかに借りられるかもしれない場所について説明がなされた。サークルが主体となって大学の施設を借りるのは現状不可能なため、どこでもいいから部屋を用意してほしいといったことを伝えた。

川内キャンパスに借りられるかもしれない場所があるそうなので、当日14:40から20:00まで借りたいと希望を出した。(これは少し短かった。当日15:00までのリハーサルのことを考えていなかった。)

川内と青葉山どちらから参加するか、あるいは別の場所で参加するかアンケートを取った。

10/23

川内キャンパスにあるマルチメディア棟の演習室を1部屋借りられることになった。

参加場所についてのアンケートを集計した結果、青葉山3、川内2、別の場所1という結果になった。

研究室のチーム3つもSlackに参加し、参加場所についてのアンケートに回答することになった。こちらは全チーム青葉山からの参加を希望した。

10/25

模擬国内予選当日。ほとんど強制するような形で全チームに参加してもらったが、当日別の予定があって参加できない人もいた。特に参加場所を指定したりはしなかった。

10/27

10/22に送った分の公欠届が返ってきたので、各人に分配して確認してもらった。

10/28

ICPC予選出場に関する誓約書について、情報が公開された。締め切りは11/02までなので、急いで周知した。

10/29

青葉山から都合6チームが参加することになって多すぎるという話になった。サークルのチーム1つが参加場所を川内キャンパスに変えた。これで残りは5チームだが、研究室の近くにもう1部屋借りられたらしいので、十分収容できるようだ。

10/29-10/31

誓約書の受理状況が公開されているので、コーチから教えてもらったチームIDを見つつ出していないチームと連絡を取った。無事全員提出できたことを確認した。

11/02

コーチから競技用IDとパスワードが送られてきた。

11/04

もう一通公欠届が必要だったが先生に頼むのを忘れていた。慌てて送信したところ、すぐに返信があって間に合った。

11/05

コーチから国内予選に関する連絡と予選・リハーサルに関する情報の2通のメールが送られてきた。

以上3つのメールをパソコンに保存しておくよう周知した。

各参加場所についての情報や注意点についてをまとめてSlackに投稿した。

11/06

国内予選当日。今年はサークル全体での打ち上げを一切行わなかった。

やった事

  • 参加するメンバーを決める。
  • コーチを顧問の先生経由で研究室の人にお願いする。
  • 研究室と人数の調整、合同チームの結成をする。
  • 研究室に参加場所の確保をお願いする。
  • ICPC公式サイトで個人アカウントの登録をする。
  • チーム編成とチーム名を決める。
  • 個人アカウントのメアドとチーム名をまとめてコーチに送る。
  • アカウントに情報を追加する。
  • 公欠届を用意する。
  • 模擬国内予選に出場してもらう。
  • 誓約書を提出する。(2020年のみか)

練習について

今年はサークル全体での練習を一切行わなかった。ただ、練習方法について個別に質問を受けたので、回答を全体に共有した。

練習の際は、Aizu Online Judge(AOJ)に提出するとよいです。

過去問一覧:http://aoj-icpc.ichyo.jp/

問題名の横についている星マークが多いものほど、いわゆる「良問」です。個人で練習する際はこれを参考にするとよいです。

チームで練習する際は、AOJのほうで過去問が年度ごとにまとまっているので、そこから1揃い使うのが良いです。

https://onlinejudge.u-aizu.ac.jp/challenges/sources/ICPC/Prelim

ICPC特有のシステムに慣れてもらうためにも、模擬国内予選には参加してもらうべきである。また、本番前のリハーサルも行うべきである。

週記(2020/11/16-2020/11/22)

11/16(月)

日曜日、週記を投稿してからProject Eulerを3問解き、布団に入りハーメルンを1作読み終えた。

灰色の獅子 - ハーメルン

読み始めたのは結構前だったが、残り20話のあたりからだんだん読むペースが落ちてきて、結局読了はこの日になった。

午前8時前に就寝、午後2時半くらいに起床。学食は閉まっているが、土曜日に来た両親が置いて行った食料がいくつもあるうえ、生協の弁当も残っているため問題ない。

「田舎をdisる歌」というネタツイがある。こんなやつだ。

頻繁に目にするのだが、どこから生えてきた怪文書なんだろうとずっと不思議に思っていた。元ネタがあるらしい。動画の19秒あたりから。

nico.ms

これのせいで一時痙攣が止まらないほど笑った。

なんとなく気分が乗らないため、今日もライトノベルを読んでいくことにする。魔法科高校の劣等生は昨日30巻を読んで本編は残すところあと2冊。ネタバレになってしまうが、達也の力が全世界に知れ渡ってすごいことになっている。でもシリーズ30巻も設定の積み重ねがあると、まあそんなものかなと納得できてしまう。そもそもシリーズ1巻から最強チート主人公に恥じない無双っぷりを発揮していたか。

主人公の強さへの理由付けはいろいろパターンがあるが、長く続いたシリーズだとシリーズ開始時点での主人公の強さはもうあんまり関係なくて、シリーズを通しての精神的・物理的成長で十分納得できるようになるっぽい。

2冊読んだ。無事魔法科高校の劣等生は完結した。これもネタバレになるのでぼんやりと書くが、ラストシーンのコレジャナイ感がすごくて微妙な顔になってしまった。まあ伏線回収という見方もできるか。すでに新シリーズのうち「魔法科高校の劣等生 メイジアン・カンパニー」は出版されていて手元にあるが、今日はもう気分ではないので読まない。

ふぁぼん氏の週記を読んだ。

yuyusuki.hatenablog.com

何か敬愛されるようなことをしたっけか……。ともかく、僕が毎週付けている週記に感化されてつけ始めたらしい。これはとてもうれしいことだ。

先週も書いたように、僕は人の日記を読むのが大好きであるようだ。個人的に、夕方の住宅街でカーテンを閉めていない人様の家のリビングを覗き見するときの快感に通じるものがある。そんな自分の欲望を満たしてくれる他者の日記を読むためには、やはり自分からやって見せて「これいいな」などと感じてくれた人が日記を公開してくれるのを待つのが最も効果的であるはずだ。

ふぁぼん氏の週記と比較してみると自分の生活がいかに自分ひとりで完結してしまっているかが如実に現れ出てくる。特にSlack等の雑談チャンネルで通話する習慣があるのが興味深い。自分の生活を高校生のあたりまで振り返ってみると、どうやら自分は作業しているときはずっと一人でいたい派のようだ。グループで通話をした経験も(片手で数えられるくらいだが)あるが、その時はいつも会話に集中し切っていたように思う。

通話に入るだけ入って、発言せずに会話をBGMとする人もいると聞いたことがある。これはかなり面白そうだと思う。Vtuberの雑談配信なるものはそういう需要に応えているのかもしれない。

PCKの問題を解き進める。予選だけ先に埋めることにしたが、最後の問題を解ける年と解けない年が半々くらいになってきた。あんまり深く考えていないだけかもしれないが、そういうのも放置してどんどん進めていると、ついに見覚えのある問題に突き当たった。2016年は僕が後輩と初めてPCKに挑戦して、5完であえなく予選敗退した年だ。

見事すべての問題が解けた。ここ最近では一番成長を実感した瞬間だ。ただ最後の2問は今でもかなり難しい。1つはシンプルにDPだが遷移をちゃんと考える必要がある。うっかりしていると3乗になるが、ちゃんと累積の何かを使って順番に計算していくと2乗になるという問題。もう1つはO(log N)k-th elementを実装した平衡二分探索木があると自明だが、ないので考える必要がある。

頭の一部分を常に平衡二分探索木が占めていて、解法を考えるのに非常に時間がかかった。結局、更新の差分を別に持っておいて計算を進め、差分が閾値を超えたら元のデータを書き換える方法でTLギリギリだが通った。さすがにこれが想定解のわけはないので検索すると、座圧してBITを使えばいいらしい。オフラインなんだからクエリ先読みで座圧は思い浮かんでもよかった。

こういうツイートをした。テンプレ設定はそれ自体にすでにファンを抱えているので、人目に触れやすいという説。先週木曜日に読んだ「アジャンスマン:あるいは文化系サークルのラブコメ化を回避する冴えたやりかた」というラノベに完全に影響されている。別にそのラノベが初出というわけではないだろう。こういう話は地球上の至るところで無限に言及されている。

うっかり人のツイートで気になるなろうを見つけてしまったため、布団に入ってから読んでいた。

https://ncode.syosetu.com/n8356ga/

午前10時、寝る。

11/17(火)

数度の二度寝に成功し、午後6時半に起きる。前日の就寝時刻を考えると、それほど長い睡眠でもなかったようだ。しかし時間帯には大いに問題ありで、明日は午後5時からインターンの面接があるが、間に合っていない。今日はそれなりの時刻に寝る必要がありそうだ。

コードゴルフを少しやった。入力なしで数列を出力する問題。以前はText(cat)で、ちょっと前にdcで縮められていたのだが、今日Rakuで大幅に更新されていた。文字コードとして読んだ時の文字列を埋めこんで、.ords.putしている。

いろいろ試行錯誤していたが、13を出力するために\r単体を含むソースコードを提出しても\nに直されてしまってうまくいかないようだ。なので、その文字はちゃんとエスケープしなければならない。Rakuだとエスケープを効かせるために文字列を"で囲む必要があって、このとき中の$"エスケープする必要がある。都合3回のエスケープが必要となっていた。

Rakuでは縮まなさそうなので、言語を変えてみた。よく考えると、Rubyにおいては同様のことをp *"".bytesでできる。かかる文字数が同じではないか。さらに、Rubyであれば$が変数名と解釈されてしまうこともないため、この文字のエスケープが必要なくなる。つまりエスケープする回数が1回減って、-1Bとなった。

ちょっとラノベを読んでいたところ、年末に2日連続のAGCが生えてTLがお祭り騒ぎになった。それに関してしばらくTLを追ったあと、こどふぉが始まった。IGMになってから初めてのコンテストである。

A1A2Cの3完でレートが3だけ上昇した。Bで詰まってもうダメだと諦めていたのだが、C問題が自明だった。しかしこれも僕の持っているライブラリでは遅延セグメント木上の二分探索ができないため、余計なlogをつけてTLEしてしまっていたかもしれない。ACLを使ったことでなんとか事なきを得た。

A問題は最初からA2に通るようなコードを書いた。ほとんど同じコードを数か所に書いたり場合分けをたくさんしているうちに20分も経過してしまい、提出した後実装がへたくそだったな~と思いつつ順位表を確認したが、50番台とかなりいい順位にいてびっくりした。コンテスト後のTLを見る限り、2x2のマスの内部で処理を完結させてそれを組み合わせる解き方をした人が多く、その場合実装に結構時間がかかっていたようだ。僕は左上から右下に全部押し付けて行って、最後右下の2x2マスだけしっかり処理すればOK、という解法だった。

Bはなんもわからん。次数が小さい頂点から順に消したらうまいこと残ってくれるかと期待したが、ループと3-クリークがあったときに容赦なく3-クリークが消えて行って涙が止まらなかった。これを確認して、諦めてCに行った。

BのTLがとんでもなく厳しいらしい。ちょっとlogをつけるとすぐTLEするそうで、かなりの人数が落としていた。そうするとBを解かずにCを解いた僕みたいな人間の順位が上がっていって、システス前はマイナスを示していたpredictorもシステス後はプラスに転じていた。

B問題を応用すれば最大クリークが多項式時間で解けてしまうように思っていたが、冷静になってから考えると、k-クリークが見つかるかk-denseグラフが見つかるかのどちらかであって、k-denseグラフからk-クリークを見つけるのは相変わらず難しいようだ。

TechFULというサイトがあって、数え上げと題して10問セットの問題を公開している。スコアに応じて商品もあるようなので、参加してみる。本当は寝る必要があったが、無視した。

かなりキレているので、問題内容に関わることかもしれないが言ってしまうと、50000回の再帰でREを起こすらしく、これの解消のために1時間くらい消し飛ばした。そこまではそこそこいいスコアを積み重ねてきたのに、この問題のスコアが最低保証ぶんくらいしか取れなくてとんでもないことになってしまった。

そもそも解法を得るのに1時間以上かかってしまっていたため、別にREがなくてもそんな良いスコアではなかったかもしれない。それはともかく50000回の再帰でREを起こすような環境で競技プログラミングのまねごとをさせられたのが本当に気に入らない。真似事と言ったのは、50000回の再帰でREを起こすような環境を競技プログラミングのプラットフォームとして認められないからだ。

布団に入って昨日の続きのなろうを読み、午前10時半に寝た。就寝時刻遅くなってないか?

11/18(水)

午後3時半、目覚ましで執念の起床。しばらく布団でもぞもぞしていたが無事身を起こすことに成功し、シャワーを浴びた。最近髪の毛を切っていないためもみあげなどみっともないシルエットになっているが、いまさらどうしようもない。とりあえずひげは剃っておく。

15分前から待機してほしいとのことだったので、少し焦りながら食事をとる。パソコンの準備をしてマウスとヘッドセットを接続し、確認して準備完了。午後5時まではどうやら本当にただ待機するだけらしいので、その間Twitterをしていた。緊張で腹が痛くなってくる。

面接の内容自体はもうすでに記憶が薄れてきている。終了直後にツイートしたものが最も詳しい。

聞かれたことに答える以外は基本コードゴルフの話をしていたと思う。「自分のこれまでの取り組みを2つ挙げて、大まかに流れを説明してください」という質問を最初にされて、そこで答えたことからどんどん話が広がっていく感じ。もちろん広げたのは僕ではなく面接官の方。話術とでもいうのか、本当にすごかった。僕の話に中身があると勘違いしてしまいそうになる。

実際には中身など存在しなかったわけである。取り組みとして僕はコードゴルフと競プロを挙げたが、どちらも内容としてはひたすら時間をかけて問題を解きまくるだけで、特に山もオチもない。意味もないかもしれない。まさにやおいである。

レートが2650ちょっとであったり、これまでに競プロの問題を5500問解いたり、そういう数字は結構大きい。しかし別にそこまではなくてもよくて、プラスアルファで何ができるかが問われる、という話を聞いたことがある。僕をほかの競プロerと差別化しようとすると、コードゴルフしかないと思っているので、それをひたすら語った。

あとはインターンに参加する目的とか、将来どうするかも聞かれた。将来については何も考えていないので何も考えていないと言った。インターンに参加する目的は聞かれるだろうなと思っていて、どう答えるかは前もって考えていたので、今でも回答を再現できる。「競プロで就職するにあたって、競プロの力を生かすために身に着けておいたほうが良いスキルなどが知りたいため。」

面接が終了してぼんやりしていると、ホスフィンから外食に誘われた。よく考えると今日はこの後何もないので、外出するのに問題はない。行こう。

ラーメンを食べて閉店直前の本屋に駆け込み、ゲーセンに行ってチュウニズムをした。チュウニズムでは半年以上前のマップの課題曲たちが解禁されていた。ずっとイベントマップばっかりやっていたため、そのマップにはまだほとんど手を付けていなかった。

ホスフィンと2時間くらいマッチングをした後、解禁された曲を詰めた。13+のMegameteorでSSSを取った。譜面動画はずっと見ていたので最初から7k出ていたが、そこから500点が遠かった。

閉店までゲーセンにいて、日付が変わってから帰宅する。買ってきた本はこれ。

結構疲れているが、しばらく競プロをした。朝方、Slackで取っていた今期の活動に関するアンケートの結果を投稿する。今期は毎週月曜日に活動することになりそうだ。その後布団に入り、なろうを読んだ。atgolferで僕の最短コードが縮められていることに気づいたので、スマホから取り返した。午前10時、就寝。

11/19(木)

午後8時、起きる。睡眠時間が長いのはいいことだが、今度はコンテストに間に合わなさそう。明日一日で少し生活リズムを前にずらしておきたい。起きてからしばらく、かなり頭が痛くて大変だった。

昨日寝る直前に取り返した最短コードが再度取られていた。出力の場合分けでprintf$0=を両方使っていたのだが、sprintfにしたら1文にまとめられたようだ。かなり悔しい。

atcoder.jp

ICPC国内予選の問題がAOJに公開されていたので、解く。C問題は前からよくわからないと思っていて、適当に書いたら案の定8secに間に合わなかったので、国内予選のサイトからデータを落としてみて手元で動かす。

まず素因数分解して3つ以下の素数の積の場合は単純に足して出力する。そうでない場合はcbrt(N)からデクリメントしていき、大きめの約数から分解を試すことにする。このときa+2sqrt(N/a)が現在の答えを上回ると計算を打ち切ったりなどの枝刈りを入れた。正直計算量解析など何もわかっていないが、動かしてみた感じどうやら最初に素因数分解するのに時間がかかっているらしい。というかテストケースの後半はだいたい大きな素数のようで、素因数分解した後単純に足して出力するだけのケースがとても多い。あらかじめsqrt(1e15)以下の素数を列挙しておくと爆速になって、提出すると5sec強で通った。

こどふぉに出る。4完。EがわからなくてFに特攻したが、よくわからなくて全然ダメだった。Eは区間の真ん中の値を見るとどちらの解説を聞くか分けることができるので、L+Rでソートすると前半と後半でそれぞれ最大を求める問題に分解できる。これは非常に頭が良い。適切にソートしたら前半と後半に分解できるというのは典型で、僕も適用できないか考えたはずだが、L+Rはわからなかった。考えているうちに片方決め打ちでもう片方をデータ構造で処理するなどの方向に思考が流れていった。

Eだけupsolveした。前半と後半に分解した後の処理にデータ構造を適用しようといろいろ試行錯誤したのだが、実は線形時間かけても十分間に合うことに気づいてがっくり。

今日は合間合間でラノベを2冊読んだ。「史上最強オークさんの楽しい種付けハーレムづくり4」と「魔王が如く」というタイトル。どちらもかなりひどいタイトルだ……。内容に関しては特に感想を持てない。

朝になったのでゴミを出しに行く。そのあと、まだ寝る気になれなかったので食事をとって競プロをしていた。

https://onlinejudge.u-aizu.ac.jp/problems/0412

凸多角形の内部にある点が含まれるか判定する問題を解いた。凸多角形の頂点はN<=3e4個、判定する対象の点はQ<=6e4個。普通に判定するとO(NQ)で、当然TLEするのだが、ライブラリを使うのをやめて高速化を意識しながら一から書き直したら通った。

解説を読むと、凸多角形をN-2個の三角形に分割したあと角度に関する二分探索で調べる範囲を限ればO(log N)で解けるようだ。非常に頭がいい。幾何ライブラリに入れることにした。verifyにはこの問題を使おう。多角形の辺上に頂点がある場合の挙動に関しては、この問題にはそういうケースがないのでかなり怖いが、まあIN/OUTの判定さえできればとりあえずはよいだろう。

午前10時になった。金曜日の課題締切当日投稿学概論は、今週は小テストがないようだ。先週の小テストの回答が載っていた。

HH'の元はl、kを整数としてn/m*l+n/m'*kがaの肩に乗ったような形をしているので、HH'の生成元はa^gcd(n/m,n/m')となる。gcd(n/m,n/m')|nなので、位数はn/gcd(n/m,n/m')。

週記(2020/11/09-2020/11/15) - kotatsugameの日記

これはlcm(m,m')と等しいらしい。全然わからんかった。

布団に入ってなろうを読む。4年越しに更新が来ていて大声を出した。

https://ncode.syosetu.com/n1996ca/

正午、就寝。まずい。

11/20(金)

午後6時、目を覚ます。二度寝と行きたいところだが、明日のARCに向けた生活リズムの調整を考えて起きる。シャワーを浴びて食事をとり、手足の爪を切った。

yukicoderがあるが、お酒を呑む。ほろよいを1缶だけ。飲み切らないうちにyukicoderが始まった。

4完。Dはかなり頑張った。危険度がK以上の数列の個数を数えるのには計算量が2乗ぐらいかかってしまうが、代わりに危険度がK未満の数列の個数を数えて全体から引くことにすると、区間addの更新をするdpになる。区間addimos法を計算しながら行えばよくて、区間の右端を調べるためにlower_boundを使っても間に合う。書いている途中に気付いたが、右端は単調に増加するのでインクリメントしていけば全体を通して線形時間で行えるようだ。K=1..2500として危険度がK以上の数列の個数の総和が答え。

Eはよくわからない遷移の木DPを全方位木DPに直す問題。そもそも最初の遷移から間違っていたらしい。

行ってすぐ戻って、というケースに対応できていなかった。全方位木DPに直すのはかなりうまくいったと思う。最初のdfsでは子から帰ってきた値をvectorに入れておく。隣接リストの何番目が親であったかを記録しておいて、二度目のdfsではそこに値を埋めて何事もなかったかのような顔をする。無理に定数個の要素を持ってゴリゴリするのは難しい。

書籍化!? これ6年前の作品だぜ?信じられない!僕が一番好きな作品だと思っているので、書籍化される妄想をしたことは何度もあったが、さすがに古い作品だし、そんな話の影も形もないということは書籍化はあり得ないだろうと思っていたのに。 で、それに伴って全面改稿するのだが、新しい作品としてなろうに投稿していくらしい。それ商売になるのか?ありがたく読ませていただきます。

週記(2020/09/28-2020/10/04) - kotatsugameの日記

リメイク版の第一章が完結した。確かに設定などいろいろ整理されていて、以前は突拍子もないと感じていたところにもちゃんと説明がついていた。設定がちゃんと練りこまれていることに気づき、感動した。しかしバトルシーンやクライマックスの盛り上がりは少しなくなってしまったように感じる。以前著者の方がどこかで書いていたと思うが、元の作品には「熱量」みたいなものが大量に投入されていたらしい。リメイク版は何というか、小ぎれいにまとまりすぎているのだ。フィルやアリスはもっと見得を切ってほしい。

しかしまあ、読み直して一層この作品が好きになった。本当におすすめなのでぜひ読んでほしい。

PCK予選の問題を一通り読んだ。全部で194問あって、そのうち7問がまだ解けていない。これを埋めるのは後回しにして、今度は本選の問題を解いていくことにしよう。

布団に入ってなろうを読み、午前11時就寝。どんどん遅くなっている。

11/21(土)

午後7時半、起床。とはいっても途中で1回大学生協から配達される弁当を受け取るために起きたので、睡眠時間が細切れになっており、しっかり寝たという感じはしない。チャイムを鳴らされても起きる自信は全くないため、配達予定時刻に目覚ましをかけておいた。幅が2時間ほどあるが、毎週早めに来てくれるのでまたすぐ寝られてうれしい。

食事をしたあと、ARCまで少し時間があるのでウォームアップと思ってFiguresにチャレンジしたが、何もわからなかった。atgolferで流れてくるので最短コードがかなり短いことは知っているため、早く解きたいのだが、解説を見るのはもったいないように感じる。知識としては十分なはずなんだよな。木の次数列による数え上げの公式も別の問題で見たことがある。

ARCはABCDFで38位。パフォーマンス2904でレートは2652→2680(+28)だった。

Dまで解いたあとEを見ると何もわからなかったため、順位表を確認したところ、EよりFのほうが3人くらい多く解いていた(とは言ってもどちらも一桁人だが)ことに気づき、Fを読んだのだったと思う。Fはとっつきやすそうな見た目をしていたので、そちらを考えることにし、見事解ききることができた。この判断はよかった。

ACが出た直後は考察をいろいろ感覚ですっ飛ばしてしまったなあと思っていたが、振り返ってみれば必要な観察・証明には不足がなかったように思う。僕が引っ掛かったのは、木の直径の端点(の片方)をノードAとしたときに、Aから距離k以内にある2頂点uv間の距離がkより大きくなることはないだろうか?ということ。証明の方針、この場合は「そういうものが存在すると直径がさらに長くなる」ということだけ考えて細かい計算や理論の確認はしなかったが、今考えても確かにこれでよさそうだ。

A問題のコードゴルフは面白い。最初は約数を全探索する解説の方針で解いていたが、TLで解の公式を使用する方法を見た。NM=PよりM=P/Nが得られて、N+M=N+P/N=Sとなるため、N^2-SN+P=0である。これを解いて正の整数の解が得られるか確かめればよい。もっと簡略化できて、判別式S^2-4Pが平方数であればよい、まで言える。これを利用するとコードが非常に短くなった。

atcoder.jp

負の数をvすると消えて、それでもうまくいく。

そのあとこどふぉdiv.2があることに気づき、気分が良いため出る。6完。7問目は配点も大きいし見ただけでは一切方針が浮かばなかったので、あきらめてラノベを読んでしまった。解法を聞いて感動した。わかってしまえば正当性は明らか。いわれてみれば……というタイプの問題に感じられる。

E問題は、こういうタイプはとりあえず全部XORを聞くんだよな、と思ってそのもとで考えると解けた。

ラノベを読み終わる。「竜と祭礼2」。前作も非常に面白かったことを覚えているが、1冊でまとまっているように感じられて、まさかシリーズ2作目が出るとは……。そういうこともあって、前作のラストからどう話がつながるかわからなくて何となく読むのを後回しにしていたら3巻も出てしまった。今日はたまたま目についたので読んだ。この巻も非常に面白い。面白いが、最近のラノベっぽさは全然ないように感じる。3巻も明日読む予定であるため、作品の感想は明日に回そう。なんといっていいのかわからないので後回しにした、ともいえる。

昨日第1章が完結したと言及したなろうは、閑話が1つ投稿されていた。リメイクではなく初めて読む話だと思う。元の版ではほとんど語られなかった主人公のパートナー「アシュリー」に関する話だったので舐めるように読んだ。

PCKの問題を解こうとしたら非常につらくて全然進まなかった。平面に置かれ、線分で囲まれた図形を認識するのがつらすぎる。必死に実装したところWAで、テストケースを見ても頂点数が50くらいありつらい気分になった。CSAの平面プロットを使用してデバッグしたところ、バグを見つけた。

こういう部屋があると、ぐるっと一回りしようとして「同じ頂点」が出現したところで探索をやめてしまう。正しくは「同じ辺」であった。

こういうことをツイートしたのだが、じゃあラノベ読むのは間違っているのでは?という話になるので、少し考えた今は何とも言えない。ヒロインにあまり興味がないのは事実。正午、就寝。

11/22(日)

午後7時半、起きる。食事してPCKの問題を眺めていたらABCの時間になった。

全完。F問題が典型すぎる。全般的にやるだけで、Cが一番難しかった。A問題でdcを使ったら負の数を読み込めなくて1WA。制約を確認していなかった。

Cはテストケースが弱いらしい。after_contestが追加される前に、と現在の最短コードをパクって適当に縮めておいた。言語の選定も全然やっていないので、もしかしたらafter_contestに対応してなお縮められるかもしれない。

手ごたえが一切なくてちょっと物足りないと思っていると、TLでインドネシアのコンテストがあるとの情報を得たため、いい機会だと登録してみた。

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

6完5位でレートは2249になった。A問題はギャグだったのだが、これがこのコンテストサイトで解く初めての問題のため、非常に不安になった。

D問題は二分探索まで一瞬で見えたのにそのあとバカなことをやって2WA生やしてしまった。UFで連結成分が2つ以下だったらOKだと思ったり、二部グラフ判定をするときに連結じゃないグラフを想定していなかったり……。

F問題は実行時間が1secくらいだったが通った。自分が含む部分集合全体の和を求めたくて、これは今年のICPC国内予選でも使用したなんちゃら変換を使用するとよい。

こどふぉで通知が来ていてなんだろうと思ったら、このコンテストの結果発表のブログで言及があったらしい。

https://codeforces.com/blog/entry/84805

5位のところに名前が載っているだけかと思ったら、C問題とE問題のFAを取っていたらしくびっくり。かなりうれしい。

竜と祭礼3巻を読んだ。昨日言及したやつだ。相変わらず非常に面白かったが、ラノベっぽさは一切ない。昨日の寝る前のツイートに照らし合わせれば、主人公とヒロインが無駄にイチャイチャしないので良いという話になる。あとがきによればこれで内容的には一区切りらしい。1巻で張られていた伏線が回収されていた。とはいっても、何が伏線であるかなど意識して読んでいないため、残っている伏線があってもわからないというのが正しい。ただ今巻で新たに登場したキャラもいるし、謎も残ったままのように感じる。どれくらい人気が出ているのかわからないので詳しいことは言えないが、内容を見れば続刊はありそうなことである。

魔法が存在する、いわゆるファンタジー世界を舞台にしているが、内容は伝承を調べたりわからないことを解き明かしたりといった感じの落ち着いた物語だ。魔法のある世界で論理を頼りに進んでいく話といえば(僕の中で)超有名な作品、米澤穂信の「折れた竜骨」がある。こっちも竜という字がタイトルに入っていて面白い。

この作品を読んだ直後に、最近のチャラチャラしたラノベらしいラノベを読む気にはなれないな……。次は何か一般の本を読むことにしようと思う。

サークルの今期の活動について、水曜日にアンケートの集計をしたが、そのあと時間帯についてのアンケートも投稿していた。これは昨日で締め切ったのだが、昨日の部分で言及するのを忘れていた。活動は毎週月曜日の午後8時からである。初回は明日(というか書いている時間からして今日なのだが)で、ABC183の解説会を行う。実は明日11/23は祝日らしい。これはちょっと申し訳ないことをしちゃったかな。

EとF以外は解説役が現時点でいないので、おそらく僕が入ることになるが、スライドを何にも作っていないのでちょっとまずいかもしれない。しかし、解説役がいないところを全部僕が埋める運用はどうなんだ。僕自身は特に負担でもないのだが、たぶんあまり良い習慣ではないのだろう。第一、持続性がない。僕が辞めたら終わりである。ただ、僕がサークル長を務める間は誰かに何かを強制することはできるだけしたくないという方針があって、穴埋めを持ち回りにするのは避けたい。

週記(2020/11/09-2020/11/15)

11/09(月)

先週の週記を投稿してから寝るまでにあった話。週記にスターがつけられたのだが、Ctrl-Fで調べても記事内に存在しない部分文字列だった。不思議に思っていたところ、こんな投稿が。

よくわからないけどそんな労力かける必要あったか?ありがとうございました。

TLで数人の人が日記に興味を示しているのを確認した。また、非公開の状態だったらしい記録がpublicになったりもしていた。人の日記を読むの楽しいので、投稿する人が増えるとうれしい。やる気がある人は週に1回まとめて投稿する形式にすると記事の乱立を防げてよいのではないかと思う。3日坊主は1回も投稿できずに終わってしまいそう。

この週記をつけ始めたのは7月の末あたりで、当時はアウトプット欲がものすごかった。現在は特にアウトプット欲が多いわけではないけど、見事に習慣化して続いているのは素晴らしいこと。ただまあ、毎日書くというのはあまりできていない。寝落ちとかで次の日とかさらにその次の日にまとめて書くことが多くなってしまった。

syosetu.org

以前にも紹介したGame of Vampireは、ついにEpilogueという章に突入した。まだ読み足りない気分だ。主人公のアンネリーゼ・バートリが大好きなのだが、これはオリキャラなのでここでしか読めない。

午前4時に寝て、午前11時半に起きた。正確にはもっと前から起きていて、二度寝に失敗してしぶしぶ起床報告をしたのが午前11時半。毎日同じことやってないか?

今日は、金曜日の真夜中に救急車を呼んだことの後始末として診察の料金を支払ってきた。これのために外出することが分かっているので、その時に食べればわざわざ学食に行かなくてもいいかなと思っていたらめでたく学食の営業時間を逃してしまった。

市街地に出てATMでお金をおろし、病院に支払いに行った。料金は5710円だった。聞いていたのよりもかなり安くて安心した。保険適用前は2万円くらいしていたようなので、日本の医療制度に感謝。

ゲーセンから帰るときにドンキに寄るくらいでしかこの辺りは訪れない。時間帯は大体日付が変わった後だったので、この近辺のお店は当然ほとんど閉まっている。通りにラーメン屋さんがあって、なんともしなびた感じの外観で気になっていたのだが、今日のこの時間ぐらいだと営業しているらしい。そこで食事することに決めた。

ラーメンと半チャーハン。球をいくつかのパーツに分解して再度組み立てたら2つになったので、その半分です、みたいな量をしていて食べるのに苦労した。あと味がすごい不健康な感じでよかった。

本屋さんに寄ってからゲームセンターに行った。最近追加された新曲の「Blackmagik Blazing」をプレイしたが、手が間に合わなくてお話にならなかった。本当に信じられないくらいすっぽ抜ける。間に合っていないのか、逆に急ぎすぎて譜面を追い抜いてしまっているのか、またはリズムが全然わかっていないのか。このことを確認するためには何度もプレイして感覚をつかむ必要があるが、何度もプレイしたくなるような譜面ではない。諦めた。

新曲のスコア詰めを諦めてしまうと、やることがあんまりなくなってしまう。適当に13や13+を触っていてもスコアは伸びないので、自分が何のためにチュウニズムをプレイしているのかわからなくなってしまう。でも1ゲーム終わると無意識に次のクレジットを投入して、その効果音で意識を取り戻す。こんなことを考えて鬱々としていたが、最終的には13の新規AJが3つ出たので成果は十分だった。

帰ってきて、買ってきた本をツイッターにUPする。

現代社会で乙女ゲームの悪役令嬢をするのはちょっと大変」は小説家になろうで読んでドはまりしたもの。このサイズでも買うくらいには楽しみにしていた。

帰ってきてシャワーを浴びるのにグダグダしたり、浴びた後もパソコンの前に座ってグダグダしていた。やるべきことはいくつかあるのだが、かなり眠くてやる気になれない。しかし眠る気にもなれない。異常者。

期限が明日に迫っていたので、リクルートインターンの面接日程を予約するのだけ行った。これはまあ少しクリックするだけなので元気がなくても可能。

ツイッターを眺めていたらこのなろう小説が流れてきた。

https://ncode.syosetu.com/n0821go/

布団に入ってから少し読むが、眠気に耐え切れずすぐに寝た。午前4時だった。

11/10(火)

正午あたりに起きる。これもまた二度寝に失敗した結果の起床報告なので、実際何時に目を覚ましたかは正確にはわからない。

AtCoderの特定の問題の、コンテスト中のACの実行時間を集計して、言語ごとにまとめた表が昨日ツイッターに流れてきたのだが、速い順にRustCC++だった。Rustが速いのはproconioの影響ではないか、というツイートを見て、なるほどと思った。とりあえずCC++より速いのはscanfcinより速いからだろうと予想していたが、聞くところによるとRustproconioはそれらよりさらに速いらしいので、そういう入出力の影響である可能性は高いと思っている。あとは、C系統の言語がそれ以外に負けるわけないだろという固定観念もある。

学食に行く。昼の部が終了するギリギリの時間なので主食はカレーしか残っていなかった。味噌汁は相変わらずしょっぱい。

atgolferを動かしているサーバのレンタル代を支払うために自動引き落としの口座を登録したはずなのだが、登録の書類を送ってから半年くらい経つのにいまだに毎月メールで振り込みの案内が届く。口座の登録に時間がかかっているのかな、それとも期限ぎりぎりまで放置していたら勝手に引き落とされるのかな、と思っていたが、きちんと設定を確認すると、口座登録の後に支払方法の変更をする必要があったらしい。今日自動引き落としに設定しても、今月分は自分で振り込む必要がある。学食の帰りに郵便局に寄ってきた。

昨日のなろう小説を読み終わった。長命種の話は好きなので、この話も設定だけで好みだとわかるが、さらに文章も軽妙で面白かった。毎日更新しているのだが、最近連載を始めたばかりのようで、まだ話数が少なく物足りない。これから継続して追っていきたい。

https://ncode.syosetu.com/n0821go/

Game of Vampireを少し読み返していた。咲夜がホグワーツの教授たちから大切に扱われているシーン好き。

FHCのTシャツに関するメールをその後確認していなかったことに気づいた。慌てて確認したところ、「第三者からのメールが来週末までに届くので」と書いてあって安心。まだ届いていない。

週記(2020/11/02-2020/11/08) - kotatsugameの日記

これが届いていたので、申し込みをした。住所の入力画面の次は、特に確認画面など存在せずに即座に終了してしまったので、目を皿のようにしつつ入力する必要がある。幸いnuipさんのツイートを見てこのことを知っていたので、あらかじめ念入りに確認しながら入力していた。

かなりびっくり。bcは定数畳み込みも一切行わないのか。いっそすがすがしいな。これのせいでTLEしてしまっていたコードも、探せば見つかるかもしれないが、そんな気力はない。結構解ける問題が少なくなってきた。Other Contestsはおそらく明日にも確認し終わるだろう。その次はどうしようか。今bcのstreakが50日ちょっと続いていて、切り時に悩む。1000ACしたいと思っていたが、思ったより解ける問題が少ない。

午後11時ごろ、かなり眠くなってきたので布団に倒れこむ。ちょっと寝てまた夜中に起きるか、と思っていたら朝まで爆睡した。

11/11(水)

午前10時半、起きる。10時間以上という最近まれにみる良質な睡眠がとれて気分がいい。ただ、エアコンとか部屋の電気をつけっぱなしだったし、寝る前にしておくべきだったことを一切できていない。

ツイッターに新機能が追加されたらしいが、Androidの公式アプリやTwitter Web Appは未対応のようだ。ちょっと気になるが、話だけで自分の目に見えないものは存在しないのと同じであるので忘れる。

今年のJOIの一次予選(第2回)の過去問が公開されていた。第1回は大会から1週間もせずに公開されていたので、今回もそのくらいの間を置くものかとピリピリしていたが、結局3週間以上たった今日の公開になった。しかも時間帯も全然違って、第1回の公開は深夜だったが今回は朝10時半だった。

なんでこんな公開タイミングに関してピリピリしていたのかというと、こういう簡単な問題はすぐに自明な最短コードが提出されてしまうからである。こういう問題でShortestを確保するためには、ほかの人より早く存在に気付いて提出をしなければならない。

僕が気づいたのは11時半ごろで、慌てて解いたのだが、これが問題を公開した責任者(?)のPro_ktmrさんを除けば最速だった。そのままほかの人の提出がされる前に思うさま縮めた。A問題11B、B問題19B、C問題46Bで切り上げる。これが12時過ぎのことで、いまだに僕(とPro_ktmrさん)以外の提出がなかった。

こういうアップデートや問題公開のタイミングは、外から見ているだけでは一切わからないので、毎回ハラハラしている。言語アップデートの時は一番ひどくて、確か2月あたりから毎日確認していたのだが、結局5月まで待たされることになった。5月半ばに半日だけ更新された後、巻き戻されて、この際は公式から「6月には再度アップデートする」という声明が出たはず。まあ6月といっても実際にアップデートされたのは終わりごろだったので、さらに1か月ピリピリする羽目になった。

これまでは本当に運よく、毎回僕が起きている時間にアップデートや公開がされていたと思う。毎回こういう更新をリアルタイムで見るたびに運がいいなと感じているので、もしかしたらたまたま起きている時間に行われたことだけ特別覚えているに過ぎないのかもしれない。

ともかく、今日公開された3問は現状すべて僕が最短コードを保持している。そのあと布団に転がってコロコロしていたら学食が閉まりかけたので、慌てて向かった。

帰り道でコンビニに寄ったところ、クーリッシュのマスカット味がなくなっていた。かなり好きだったのでショック。泣く泣くバニラ味を買って帰る。

クーリッシュのマスカット味というのを見つけて衝動買いした。帰ってきて食べたところ、超うまい。

週記(2020/10/12-2020/10/18) - kotatsugameの日記

1か月しか陳列されなかったのか。

ところで、ヘルメットをかぶったままコンビニに入店したところ、店員から注意を受けてしまった。確かにヘルメットは不衛生かもしれない。社会性ポイント-1くらいか。

帰ってきてからリクルートインターンに向けたスキルチェックを進める。

競プロで攻めていこうとしていたが、そんな狭い範囲の職業は存在しておらず、データを加工するポジション一般にカテゴライズされている。それについてのコーディングテストなので、例えばネットワークだったりSQLだったりの知識を求められていて、それらに対して競プロは何の役にも立たない。

週記(2020/11/02-2020/11/08) - kotatsugameの日記

これ。めっちゃググりつつ頑張って埋めていく。ツイートから経過時間を復元したところ、6時間くらいかけていたようだ。でも知識ゼロから検索だけで回答できたことを考えると、全然難しくないのかもしれない。アルゴリズム関連の問題だけは検索だけで回答するのは不可能だと思うので、特別難しかったのかもしれないと思いなおした。競プロerはその問題に対して特効を持っているため、実際に就活に役立っているとも言える。

少しだけAOJ-ICPCをした。つい先週レポート提出があった講義が、またレポートを課したらしい。しかも先週と同様紙のレポートを研究室まで出しに行かなければならない。

ラノベを読んだ。「現代社会で乙女ゲームの悪役令嬢をするのはちょっと大変1」。月曜日に買ってきたものだ。

改めて読んでも面白かった、と思う。正直政治や経済の細かい話は分からないので、なんとなくのストーリーとキャラクター設定だけで読んでいる。それらが好みに合っている。巻末に2巻の刊行予定が掲載されていた。そんなに人気なのだろうか。文庫サイズのラノベで、1巻時点ですでに2巻の予定があるというのは結構珍しい話だと思うが、大きなサイズのラノベだとちょっと事情が違うのだろうか。僕は大きなサイズのラノベをほとんど読まないので、わからない。

読み終わった後しばらくAtCoderをしたり日記を数日分(!)つけたりして、午前5時、就寝。

11/12(木)

午後4時くらいに起きる。数回二度寝に成功したと思う。素晴らしい睡眠時間だ。生協に行けないことを除けば。

起きてからatgolferを確認すると、2問取られている。両方言語を変えることで大幅に縮んでいて、うち1問は昨日公開されたJOI予選の問題だ。C問題がdc37Bになっている。確認してかなりげんなりしてしまった。かなり元気がない状態で、片方は-1Bに成功した。少しだけ調子が上向いたが、JOI予選のほうは全然縮みそうにない。

何もできるような精神状態ではないため、ラノベを読むことにする。月曜日に買ってきた「ねえ、もっかい寝よ?」というやつ。内容や設定について別段変わったことはないが、1点、おもしろいなと思ったことがあった。舞台が北海道なのだが、ちゃんとセリフで本州のことを内地と言っていた。作者が北海道出身なのか、それとも校閲がしっかりしていたのか。まあこのくらいだったら書いていて自力で気づけるのかな?僕には無理だろうが。

次に「俺は星間国家の悪徳領主!1」。別のオーバーラップ文庫の作品を読んだときに、帯か挟まっていたチラシで存在を知って、その時は出版される前だったので先になろうで一気読みしたものだ。なろうで読んだ作品の書籍化、買ったはいいけど読まずに放置しがち。今回も2か月くらい本棚で熟成させてしまったが、きちんと読めてよかった。

あとがきによれば結構シーンの加筆などあったらしいが、あんまりそうは感じなかった。なろうを読んだ時の記憶が薄れているだけかもしれない。なろうを読んだのは8月あたりのころで、日記に記述がないか探したのだが、なかった。日記に書くこともだいぶ変化している。8月のころは大体コードゴルフの話をしていて、読書に関する話題はほとんど出ない。

ラノベを2冊読むとだいぶ気持ちが落ち着いてきた。JOI予選の問題も全然縮まないので、きっぱりあきらめる。実際、実装の方針がかなり頭よくて、自分で生み出せるかというと微妙なところだった。こればっかりは手を付けるのが速い・遅いの問題ではない。

そういえば今日はチュウニズムのアップデートで新しいLv.14の譜面が追加されている。譜面動画を見た。途中16分割のタップが降ってくるのだが、通常譜面のタップスライド以外の箇所で16分割タップが使われるのは初めてではないか?ちなみにタップスライドだと「キュアリアス光吉古牌 -祭-」の66小節目に登場する。

https://www.sdvx.in/chunithm/02/02144mst.htm

3冊目のラノベを読みつつAOJ-ICPCを進める。一昨年の横浜で出た問題が3問、500点をつけられている。うち2問は当時も解けて、もう1問に取り組んだところこちらは解けず、数時間椅子を温めていたはずだ。その因縁の問題にチャレンジしたところ、すんなり解くことができた。成長を感じる。

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4988480#1

実際難しくて、ある1つの要素を抜いた時の変化を計算するために左からと右からの累積を計算しておいて組み合わせる、という手法を使うのだが、左と右で保持する値やその扱いが異なる。逆に、異なっても復元できるというのも結構頭を使った。

サイコロスタンプという問題も解いた。頭がついていなくて、O(2^N)のつもりでO(N!)の計算量のコードを書いていてずっとTLEしていた。ちゃんとO(2^N)に書き直そうとしたところうまくいかず頭をひねっていたが、操作を後ろから見るといい性質がいくつも生まれて簡単にO(2^N)にできた。まあマス目を上書きしていくタイプの問題に対して後ろから見るというのは典型だったか。

アジャンスマン:あるいは文化系サークルのラブコメ化を回避する冴えたやりかた」というラノベを読んだ。古本屋で1冊50円の棚からあさってきたものの一つだ。そんな値段が下がっているのだから古い作品であると勝手に勘違いしていたが、まだ刊行されて2年くらいしか経っていないようだ。作中にSwitchが登場してびっくりした。

Nightmare City」のあらすじも出てきた。タイトルは作中では書かれていないが、後書きを読んだところ、このFlashをもとに書いたらしい。

www.nicovideo.jp

結構明かされていない要素とか終盤で少しだけ語られた話があって、強く続刊を意識しているように思えたが、無慈悲にも1巻で打ち切りになっている。

本当はサークルの運営とかICPCに関する記録のまとめとかしなければならないことが確実にあったのだが、ラノベを3冊も読んだらたいていのことはどうでもよくなる。積読を減らしたので、今日何もしていないわけではないと自分で信じられるのが大きい。起きてすぐはかなり悪かった精神状態も今はそこそこ好調。日記を書いていたら朝になってしまったので、風呂に入って寝る。

11/13(金)

午前12時半ごろ、起きる。5時間と少ししか寝ていないようだ。本当は二度寝する気だったが、うっかりスマホを触り始めてしまい目がさえてくる。

そういえば、インターンの面接のためにヘッドセットを買おうと思っていたのだった。生協に売っていることは確認してあるが、今日行けなかったら今度買えるのは来週になってしまいそう。そんな直前に買ってもよくないだろうし、今起きて買ってくるべきではないか?そんなことを考えた結果、午後1時半ごろに身を起こして生協に向かった。

食事してヘッドセットを買ってくる。

帰ってきて、少し眠いが今日提出の課題が出ているのでそれを終わらせる。

今日の課題は午前10時に投稿されていて、提出期限は17時だった。問題自体は自明も自明なものだったので、期限が延びているのはよくわからない。これからずっと17時期限なら、少しは許せる。いややっぱり当日に課題投稿するの許せないな。

週記(2020/11/02-2020/11/08) - kotatsugameの日記

これだ。毎週同じ話をずっとしていないか?今日の提出期限も17時だったので、どうやら恒久的に期限が延びたようだ。問題は先週よりも手ごたえがあったように感じられる。位数n巡回群G=<a>とその部分群HH'がある。HH'の位数はそれぞれmm'とする。このときHH'Gの部分群だが、その位数はいくらになるか?という問題。かなり迷走したが、結局次のような回答をした。

HH'の元はlkを整数としてn/m*l+n/m'*kaの肩に乗ったような形をしているので、HH'の生成元はa^gcd(n/m,n/m')となる。gcd(n/m,n/m')|nなので、位数はn/gcd(n/m,n/m')

2時間くらいかけてしまった。知能の低下が顕著である。

サークル運営に関する作業をする。今セメスターの活動がいまだ開始していないため、いろいろ決めなければならないことがある。また最近部室が使えるようになったらしいので、活動計画書や感染対策の書類を提出する必要があるようだ。よくわからないので適当にそれっぽいことを書いて提出した。それをサークルのSlackで周知して、あとは活動日に関するアンケートも取っておく。来週から活動を始めたいが、アンケートの回答が間に合うとはあまり思っていないので、とりあえず来週の日程・時間帯は本決まりではないお試しのものとしておこうと思う。

いろいろ調べたり文章書いたりしていたらこれにも2時間くらいかかってしまった。

いつだかのインターン説明会の際にgifteeで使えるギフトコード3000円分をもらっていた。使用期限が11/30までなので、今日何かに交換したいと思う。

3000円ぶんのギフトチケットが配られて、それで飲み物と食事を各自で用意して、歓談をしましょうと書いてある。

週記(2020/10/12-2020/10/18) - kotatsugameの日記

図書カードを3000円ぶん発行した。

いろいろやらなければならないと思っていたことをこなしている。次はヘッドセットを使って面接環境の確認でもしようか、と思って意気揚々とノーパソにつないだら、ヘッドフォンだけ認識されてマイク入力が認識されない。ドライバの問題かと思ったが、調べると買ってきたヘッドセットはドライバを必要としないことも売りにしているようだ。

慌てて配信するときに使ったマイクを持ってきて繋ぐも、こちらも認識されない。古いノーパソを引っ張り出してみるも、こちらでも同様に認識されなかった。どちらもOSはUbuntuである。ノーパソの端子の問題なのかUbuntuの問題なのかわからないが、こういうことを自力で解決できない人間にUbuntuは早いと言われているようで非常に辛い。

困った。明日あたり、USBと4極プラグの変換アダプタでも買ってこよう。ここまでいろいろ買うなら、Webカメラを買ってデスクトップに繋いだほうが確実で安上がりだったと後悔している。デスクトップはマイクが使えるけどWebカメラがなく、ノーパソはWebカメラはあれどもマイクを認識してくれない。USBに変換してつないでもダメだったら本当にどうしようもない。そうしたら電話での面接に切り替えてもらおうか。

AOJ-ICPCを1問解いた後、yukicoderに出る。ABCDFの5完。

Eは全然わからなかった。解説をチラッと見ても全然わからない。ちゃんと読んでいない。F問題は区間の掃き出しをすればよくて、これは以前記事にしたことがある。

kotatsugame.hatenablog.com

区間加算を何度も繰り返しているうちにlong longをオーバーフローしてしまわないか心配になったが、熨斗袋さんにオーバーフローしないことを証明していただいた。

直後のこどふぉdiv.2にも出た。かなり適当に参加したが、最後20分でEを閃いて実装しきれたのが楽しかった。最初のほうの問題はかなりギャグで、3問を5分で解けて爽快感があった。思いつけなかった場合は最悪だったろうけれども。

11/14(土)

昨日の夜は布団に入ってからアルファポリスでネット小説を読んでいた。アルファポリスの書籍化作品、契約に条項があるのかだいたい序盤がダイジェスト化されていて厳しい。まあ書籍の売り上げを考えるなら削除とかダイジェスト化は合理的な判断なのだろう。本来は書籍化するのにネット上で無料で読めるままなのが異常と認識するべきだが、最近、というか僕が頻繁にネット小説を読むようになってからの作品ではあまり見た覚えがなく、それが常態化しているので逆にダイジェスト化されるとつらい気持ちになってしまう。

寝たのが午前7時ちょっと前で、午後2時過ぎに起きた。しばらく布団でうごうごしていた。今日は両親が仙台に来るらしい。昨日は何も連絡がなかったけど、来た時に僕が起きていないとまずいので起きていようと頑張る。

両親が来た。持ってきてもらった荷物(お菓子や食料品等)を棚にしまってもらい、部屋の掃除までしてもらう。特に風呂場の掃除は普段ほとんどしていないため、毎回母親にしてもらっている気がする。将来どうするんだ。仙台に越してきて2年半、僕自身は一度も湯船を使用したことがないが、体毛は毎回積もっていくので毎回水で流したりする必要があるらしい。1年ほど前は湯船の蓋がとんでもないことになっていたが、それは今部屋のクローゼットに置いてある。

部屋にある読了本を実家に持って帰ってもらうことにする。前回持って帰ってもらったのは確か4月の始めだったはず。それからあまり時間が経っていないが、読書記録を調べるとだいたい100冊読んだっぽい。あと、前回わざと部屋に残したお気に入りのシリーズもあらかた持ち帰ってもらう。読み返すこともあるかと思ったんだけど、そんなこと全然なかった。

ピッタリ収まってかなり気持ちがよかった。

昨日書いたように、ヘッドセットとかそのあたりの買い物をしにヨドバシカメラに行く。そもそもノーパソの内臓マイクすら認識していないので、新しくUSB接続のマイクを買ってもダメな可能性が高そう。よってWebカメラを買ってもらうことにした。サークルで解説会をしたときの経験から、スタンドマイクとスピーカーでハウリングしたりはしないだろうと思っているが、念のためUSB接続のヘッドセットも買ってもらった。変換プラグのことは完全に頭から抜け落ちていた。

仙台駅横のビルの地下で牛タンを食べる。これが朝食となるため、たくさん食べられるだろうと牛タンを3/2人前注文したが、牛タンは噛み切りにくくて噛んでいるうちにお腹がいっぱいになることを忘れていた。結構苦労して完食。今日はAGCがあるので飲酒はしなかった。

帰宅して両親と別れる。両親は今日は仙台に泊まり、明日観光して買えるらしい。僕はWebカメラを接続してひとしきりはしゃいでいた。部屋の写真を撮ってTwitterにアップロードする。カーテンの色など、個人宅が特定されかねない情報である。今後炎上しないように気を付けなければならない。よく考えたらこれまで上げた画像にもちょくちょく映り込んでいそうなので、もはやどうしようもない。これはAGCの後にupしたやつ。

AGCに出る。BCDを解いて93位、パフォーマンスは2683でレーティングは2649→2652と3だけ上がった。A問題は400点がつけられているのに、200分考えても解けなかった。

特にD問題を通してからは60分ずっとA問題に集中していたのに、解説に掠りもできなかった。コンテスト終了直後に解説を読んで、そのあまりのシンプルさに言葉を失った。

コンテスト中に1000点問題を解けたのは偉い。左の方と右の方はどちらも同じDPで計算できて、最後にマージする。このときMM-NM-2N、……のそれぞれで計算する必要があって、畳み込みが必要かと思ったが、しばらく考えていると片方のDP配列をdp[i]+=dp[i-N]とすればMを計算するだけになることに気づけた。

なんとなくUSB接続のヘッドセットをノーパソに差し込んでみると、ちゃんと認識してくれた。このことがわかっていたらWebカメラを買わなかったのに……。デスクトップにWebカメラをつけると、Twitterにアップした写真からもわかる通り部屋の全景が見えてしまうので、ヘッドセットを認識してくれるならノーパソのWebカメラを使用したい。

布団に入ってからしばらくなろうを読んで、午前7時半就寝。

11/15(日)

午後3時くらいに起きるとPCKの閉会式をやっていた。僕が出場した時は、審査員特別賞を狙いに行ってコードゴルフをし、ペナルティを生やした挙句選ばれなかったのはいい思い出。本来ならその問題は相方の担当だったはずなのに、奪い取ってしまったのもいまだにかなり申し訳なく思っている。

魔法科高校の劣等生30巻を読んだ。1年くらい放置している間に完結してしまいかなりびっくりしている。買ってはあった。流れるように続編となる新シリーズが始まっているのを見て、慌てて読みだした。

折り込みチラシが挟まっていたのだが、かなり新シリーズの告知がなされているのに、1年経った今2巻すら出ていない作品が多い。

印象としてはシリーズ2・3巻で打ち切りの作品が多いと感じていたので、電撃文庫は特別1巻打ち切りが多いのかと考えたりもしたが、僕の購入記録を確認してみると確かにレーベルを問わず1巻が出た後音沙汰のない作品は結構存在するようだ。世知辛い話である。

ABC183に出た。30分で全完したが、周りが速すぎる。負け惜しみを言うと、途中でコードゴルフを挟んでいた。F問題は一瞬わからなかったが、順位表で無限人が通しているのを確認するとデータ構造をマージする一般的なテクが生えてきた。

コンテスト終了直後は全問題の最短コードだった。B問題については終了後他の人のコードを参考にして1B縮んだ。(ad+bc)/(b+d)==c-(c-a)d/(b+d)である。CとDはx20さんとほぼ同様のコードに到達していて、理論値という趣がある。想定解以外の方針があるような問題ではなさそうだし、この言語ならまあこうだろうなという実装。シンプルすぎて手の加えようがない。

A問題は最初迷走してAWK13Bのコードを出している。その直後にsed5Bを達成し、数秒後にdcのこれまた5Bを思いつくが、提出制限に引っかかってしばらく待ち時間があった。同じByte数なのでそれほど焦りはなかった。

F問題でPythonCounterを使い、+=でマージする提出がTLEするようだ。愚直にiterateして足しこめば通る。updateを用いてもよいようだ。+=は値が負になった要素を毎回削除しているらしく、これが遅い。サイズがnmn>=m)の多重集合をマージするとき、O(n+m)だとダメでO(m)ならばよいというのは面白い性質である。木の2乗DPと同様、非自明な計算量解析だと思っている。

https://twitter.com/poyothon/status/1327981221054300160

こどふぉdiv.1に出る。ABCD1D2を解いて42位。predictorによればレートは2505→2606と久しぶりの三桁上昇を達成し、ついにInternational Grandmasterとなれるようだ。Grandmasterは薄赤色であるというのが持論のため、これでやっと赤色であると胸を張って言える。

D問題はかなり非自明な性質をエスパーすることに成功した。

コンテスト中は証明ができず、反例が作れないという消極的な理由で採択したが、聞く限りでは証明は一瞬らしい。人々のツイートを見て何となくわかった気分になれたと思う。ほかにもいくつか示さなければならないフェーズがあったようだが、全てエスパー(というか未証明)で突破したらしい。

Bはしばらく迷走していたがどうにも解けず、DPしようとしたらできた。サンプルが合ったので提出。

Cは非常に難しい。とりあえず、1ペアだけが互いに辺を生やしあえばOKのようだ。しばらく考えていると、急に最上位bitで分けるのを思いつく。そのあとはどうすればいいかというと、また最上位bitで分ければよさそう。これは再帰で書ける。__builtin_clz(0)がとんでもない値を返すのに気づかず、コードテストでしばらく奮闘していた。

この日記を書いている最中、レート更新が来た。

日記(2020/11/06)あるいは僕が深夜に救急車を呼んだ話

kotatsugame.hatenablog.com

この週記に組み込むには文章量が多くなりすぎたので、ここだけ分割する。

11/06(金)ICPC国内予選後、打ち上げをした後から

かなり酔っぱらっていたが、ゲームセンターに寄ってチュウニズムをプレイした。有り金をほとんど使いきって、終電もなくなっていたので徒歩で帰った。

帰ってきて2時間くらい人の参加記を読んだりコードゴルフをしていたところ、午前3時半ごろに腹が痛み出す。腹を壊した感じの痛みではない。一気につらくなってきたので、さっきまで眠気もあったことだし、とりあえず寝ようと布団に向かう。それ以外のことができるような余裕はないため、トイレにも行けないしエアコンも消せない。

一応就寝報告をするが、横になっても一向に腹の痛みが治まらない。体勢をいろいろ試すもどれも効果なし。10分くらい耐えて、適当に唸り声をツイートした後必死に目をつむっていた。こんな状況下でもTwitterをしているのは、ありていに言ってしまえば心細いからだと思う。

この後30分くらいは何も覚えていないので、少し眠っていたのかもしれない。午前4時20分くらいに再度耐えかねて意識を取り戻す。またツイートをするが、今度はフリック入力に気を遣う余裕がない。とりあえず出すもの出したら落ち着くかと思ってトイレに行ったが、便も固形だし何も目に見える異常はなかった。トイレから帰ってきて、ベッドに横になるのもつらい。救急車を呼ぶことにした。

119番をして住所を伝える。2分半ほど通話して、切れてから救急隊が到着するまでしばらく時間がある。どれくらいかはわからない。横になれないのでベッドに座り込んだ状態で待っていたが、このあたりで腹痛がピークを迎える。吐き気がしてくる。吐いたら楽になると思ってトイレに駆け込むが、いくらえずいても痰しか出なかった。吐くことに慣れていないせいかもしれない。思い切り力んだ結果喉の筋肉が痛んだ。

トイレでえずいている間に救急隊が到着した。アパートの玄関までストレッチャーが来ようとしていたが、何とか歩けるようなので、歩いて救急車に乗る。このあたりでたぶん腹痛のピークは過ぎていて、上着を着たり靴下を履いたりするほどの余裕があった。携帯・財布・家の鍵を持って出た。

救急車に乗って、母親に連絡する。寝起きの母に腹痛で救急車を呼んだことを伝え、救急隊の人に代わる。救急隊の人はしばらく話した後再度こちらに携帯を渡してきたので、すでに少し楽になっていることを伝える。母は「最近腹が痛いってツイートしてばっかりだったから、この機会に検査してもらってきなさい」と言っていた。

腹のあたりを数か所触られて、どのあたりが痛むか聞かれる。臍の真上を触られたときに少し痛みが来た。カルテ作成でいくつか質問に答えたのだが、一番ひどかった痛みを10として今いくつくらいですか?と聞かれた。3であると答えた。もうここまで収まると普通の痛みと何ら変わりないので、救急車に乗っている状況を確認してかなり大げさなことをしてしまったという意識が芽生える。

救急車をタクシー代わりにする人の話とか、逆にずいぶん長く耐えてしまって状態が悪化した人の話とか、いろいろ思い浮かぶ。十数分前の自分は確かに耐えきれない痛みに襲われていたはずなのだが、そのことを証明できない。呼ばなくてよい救急車を呼んでしまったのでは?という罪悪感は今も消えていない。こういうことをツイートすると、当然「何があるかわからないので呼ぶのが正解」というリプライが届く。理性的には僕も納得して、必要な救急車であると結論付けることができるが、実際腹の痛みが治まっている状態で救急車で運ばれる間のいたたまれなさはたぶん今後ずっと頭の片隅に残るだろう。

病院に到着して治療室に入る。自力でストレッチャーからベッドに移る。体温と脈拍を測定される。医師が部屋に入ってきて、救急隊の人と話した後にパソコンのモニタを眺めている。医師の指示で看護師が採血し、僕に点滴を打った。

いくつか質問をされる。夜何をしていたか、夕食は何か、お酒を呑んだか。焼き肉を食べたとのことだが、生焼けの肉はなかったか。あまり気にしていなかったため、わからないと回答した。便は出ているか、状態はどうだったか。あとは、救急車の中で聞かれたのと同様、ピークの痛みを10としたとき今いくつであるか?という質問をされた。この時点でほとんど痛みはない。1であると答えた。

聴診器で少し調べた後、腹部エコー検査を受けた。体勢を横にしたり戻ったりといった動きをしてもほとんど痛みはなくなっている。尿検査ができないか聞かれたが、先ほど出したばかりなので出ないと答える。

血液検査の結果が出たらしい。医師から診断を説明される。まず便に異常がないとのことから腸の問題ではないことがわかる。血液検査の結果から腎臓にも異常がないことがわかる。昨夜焼き肉を食べたらしいので、急性胃炎である確率が高いが、尿検査をしていないので尿路結石も否定できないようだ。

尿検査をしてもよいが、どうするか聞かれる。尿も少しは出そうなので、「検査をしてもらいなさい」との母の言葉を思い出して、してもらうことにする。トイレに移動して尿を取る。検査結果が出るまでしばらく待ち時間がある。

医師は部屋を出て行って、看護師と2人で待っている。腹の痛みはほとんどない。自分で臍の上を押すと、少しだけ痛みがぶり返すようだが、逆にそれだけでしかない。眠気も襲ってきたが、さすがにこの状況下で寝てしまうのは不誠実にすぎるだろうと必死に目を開けていた。

結局尿に血液が混ざっていたということもなかったようで、急性胃炎という診断になった。痛み止めを処方されて、帰宅することになった。支払いについては、いくらか前払いをした後に後日改めて支払いに来る必要があるらしい。ここで、ちょうど昨夜ゲーセンで所持金をほぼゼロにしていたことを思い出さなければならない。前払いができないどころか、帰宅のためのタクシーを呼ぶ代金すらない。幸い病院は国分町にあって、そこから僕の部屋(川内キャンパスの近くである)へはあまり距離もないので、僕は歩いて帰る気でいた。医師は救急車で来たのでできればタクシーで帰ってほしいといったことを言っていたが、無い袖は振れない。

保険証と免許証のコピーを取ってもらう。向こうは「あなたのことを信用するので、月曜日必ず支払いに来てください」と言っていた。どういう基準で信用しているのだろう。僕は自身の外見について、第一印象が悪くなるようなものであるとは思っていない。あとは東北大生という肩書も関係するのだろうか。どれくらい現金を用意していけばいいか聞こうとしたが、その時近くにいた人は医師ではないためわからないらしい。2万円くらいかなあと言っていた。正直ちょっとびっくりしたが、そのあと父も同じくらいの予想を立てていたため、そういうものなのかと学んだ。夜中の対応であったことも関係しているらしい。

夜間通用口から外に出る。午前6時半、もうすっかり朝である。秋のパジャマに上着を着ているだけで、足元がかなり寒い。裏通りからだと自分がどこにいるかわからなかったが、病院の表玄関のほうに回ると見知った道路が現れた。ドン・キホーテのすぐ近くに病院があったようだ。まさかここにお世話になるとは……。

人通りが少ないうちに歩いて帰った。

考察

ストレスか食あたりだと思っている。

ストレスに関しては、まあたまっていることは否定できないだろう。そもそもレートが下がると精神はだんだん病んでいく。またそれとは別に、オープンな場所では言えないようなお気持ちを少しばかり腹に抱えている。鍵アカウントを作るつもりはないので、このあたりを一気に解消する方法はなさそう。適切に社会性フィルターをかけて放出していきたい。

食あたりに関しては、まあどう考えても焼肉だろう。生焼けの肉を食べたかもしれない。あとは、生肉を網に移したのと同じトングで焼けた肉を皿に移すのもいけない。知ってはいたのだが、自分がこれにやられることはないだろうと思ってこの日も特に頓着していなかった。

関連ツイート

このあたりでいくつかうめいているだけのツイートが挟まる。