週記(2021/06/14-2021/06/20)

06/14(月)

先週の週記を投稿してからは、比較的すぐに布団に入った。典型90問を確認したが、どうにも短い書き方がわからない。3時間くらいなろうを読んで、午後0時半に就寝。

午後7時半起床。典型90問を通しておく。ある区間に対して、その中から1点選び、以前に出現した区間それぞれに対してどれくらいの確立で転倒数に寄与するかを計算する。これはO(N^2(R-L))。この方針でちょっと縮めてみたが、すぐに大幅に更新された。制約を大きくしたときの問題が全然解けていないが、そこで何か短い書き方が得られるのだろう。

僕と同じく毎週月曜日から日曜日までの日記をひとまとめにして投稿している人たちの週記を読んだ。

TeXで書いた数式をUnicodeで表示してくれるサイトを知った。

unicodeit.net

午後9時くらいからパソコンの前に座りつつなろうを読んでいたが、午後11時くらいに眠気が増してきたので布団に倒れこんだ。さらに1時間くらいなろうを読んで、午前0時半に寝落ち。

06/15(火)

午前2時半くらいに一瞬目を覚ましたらしいが、またすぐ寝たらしい。午前5時起床。

なろうを読んでいた。atgolferの更新を見て起きだし、パソコンの前に移動した。ちょっとコードゴルフ

atcoder.jp

インデックスを、対応する値を比較してソートしたい。これはPerlでやるよりbashでやったほうが短い。

まず空白区切りを改行区切りにするのは(全体が反転することさえ許せば)dc -e?fが短いが、この問題の入力サイズではTLEしてしまった。同様にxargs -n1もTLE。よってtr ' ' '\n'を使うことになった。あとはnlでインデックスをつけて、sort -nk2で値を比較してソートする。nl -v0で0-indexedにできるのもいい感じ。

普通なら最後にawk NF=1などとしてインデックスだけ取り出すところだが、Perlで数値として評価する限りは別にその必要はない。

今日の典型90問はぜひともコードゴルフしておきたい。自動submitの設定を行うため、Ubuntu機でコーディングしていた。

Vimのインサートモードで<Ctrl-@>を入力したかったのだが、文字コードでどれに対応するのかわからなかったため使えなかった。

週記(2021/06/07-2021/06/13) - kotatsugameの日記

先週、こういう話があったことを覚えていた。自分のメイン機(cygwin)だと<Ctrl-@>が効かなかったので、そういうものかと思っていたのだが、Ubuntuでは普通に動いた。では文字コードとしてはいくつだろうか。

<Ctrl-V><Ctrl-@>とタイプすると、^@という表示が見られる。これは<Ctrl-V><Ctrl-j>と同じなので、では<Ctrl-j>に対応する文字コード10だろうかと思ったが、冷静になると文字コード10は改行である。

そこで<Ctrl-V><Ctrl-@>をそのまま文字コードとして表示させてみた。すると、なんと文字コード0であることが分かった。つまり<Ctrl-@>に対応する文字はヌル文字だったということ。ヌル文字は提出できなかったような……と思いつつ、試しにojで提出してみたところ、普通に成功したし、ちゃんと<Ctrl-@>が動いているようだ。これを利用して、先週のコードを1B縮めることに成功した。

@Aの1つ前、文字コード64。なるほど。

まあこれは本題ではなかった。今日の典型90問のコードを書く。8進数と9進数の変換をしたり、8を5に置換する必要がある。それぞれdc -e8i9o?ptr 8 5が使える。これらのK回の繰り返しを実装する必要がある。

Vimを使うことにした。!!dc -e8i9o?p|tr 8 5K回繰り返す。繰り返しにはq...qでマクロを定義するのが一般的だが、ほかにもいくつか方法がある。@='command'とする方法は、!!がうまく動かないため使えない。文字列を入力して@.をマクロとして使う方法は使える。これがよいかと思ったが、そもそも!!...というコマンドは直前のものが@:に保存されるため、@:K-1回実行すればよいだけであった。K-1回実行するのは難しい(0が繰り返し回数ではなく行頭に移動するコマンドとして認識されるため)ので、@:に保存するために実行したコマンドについてはuで取り消しておくのが良い。このことはq...qでマクロを定義する際にも言える。

昨日の典型90問の制約強化版の解法を理解した。普通の転倒数を求める方法にBIT(あるいはセグ木)を用いるものと分割統治法を用いるものの2種類あるのと同様、今回の問題を解く方法も2つあるらしい。どちらにしても、区間[L,R]の各点について\frac 1{R-L+1}を対応させるのがミソだろう。

特に前者はコードゴルフに役立つ。座標圧縮する必要も、区間の和を高速に求める必要もないから、普通の配列操作で十分実現できる。書いてみたら、昨日縮められたものよりさらに短くなった。

昼になったので学食に行き、帰ってきてから木曜日のゼミの準備を始めた。広義積分がよくわからない。何とかググり散らかしてみたが、評価の際の不等号に等号をつけるかどうか、というところがよくわからなかった。まあどちらでも証明に問題はないが、どうせならより精密に書いておきたい。

教科書1ページで疲労困憊。典型90問のACも確認できたことだし(FAだった)、遊びに行くことにした。適当に競プロっぽい問題に仕立ててツイートしてみたが、思ったより解きにくいようだ。僕はO(N^3)のdpを考えて早々にあきらめてしまった。

ゲーセンに行く。前回のアップデートで、走っていなかったマップの譜面が通常開放されていたため、詰めた。13+が2譜面に14が1譜面。14のほうはとりあえずSSが出た。13+のほうもSSS出しておくか、と思って詰めていたら、なんと一気にAJが出てしまった。13+ではこれが初めてとなる。もう一方もすぐにSSSが出た。

そのあともしばらくプレイして、ゲーセンを離脱。たいぺーと合流してサイゼリヤに行った。注文する前に間違い探しに熱中。今の間違い探しは何とかすべて見つけ出すことができた。序盤に「角度が違う」系統の難問を倒せたのが勝因か。食事について、たいぺーはおやつの時間にガッツリ食べたらしく、ほうれん草のソテー1皿のみを注文していた。一方僕はデザートを含め4皿頼んだ。豪遊。

たいぺーのスマホでプロジェクトセカイをやらせてもらった。チュウニズムの感覚でスライドの終点を離さずにいたらミスを食らい、またフリックを縦に擦ると反応しなかったこともあり、1プレイ目は普通に落ちてしまった。なかなか難しい。

サイゼリヤを出て本屋に行き、ラノベを1冊買った。駅まで行く道でたいぺーと別れ、僕は再度ゲーセンに行くことにした。

本日2回目のゲーセンは信じられないくらい上手かった。ずっと残っていた13+の未鳥を3つ倒すことに成功した。大満足。

Giselleは、序盤~中盤で鳥許容を割らないようになっていたので詰めてみた。改めて譜面を確認し、ノーツをある程度覚えておいたところ、そこそこ勝率も高まった。ラストの微妙に速いトリルは、前まで必死に擦っていたが、リズムが掴めたのか普通に押せるようになっていた。その直前の鍵盤も右手2鍵でごり押すことでAJ通過できる。1か所だけ左手2鍵が連続しそうなところがあるが、そこだけ左右交互で捌く。

Viyella's Tearsはこの日1回目のプレイだった。序盤と中盤のホールド、その直前が上手かった。最後は崩れかけたが、何とか持ってくれた。

FREEDOM DiVEはラスクレラストで出た。これまでずっとトリルが間に合わないと愚痴っていたが、今日改めて最後のトリルを連打しながらFAST・LATE表示に気を配ってみたところ、FASTが出ているようだったので、実はそれほど速くないのでは?と疑ってみた。すると面白いように通った。あるいは、今日がたまたま腕が速く動く日だったのかもしれない。ラストの3鍵も普通に押せていた。1-2の鳥だが、そのうち1-1は最序盤で出してしまったので、ちゃんと餡蜜しておけばよかったと後悔している。

f:id:kotatsugame:20210619013315p:plain
91小節

丸で囲った部分をそれぞれ片手トリルで捌く。かなりおすすめ。速いトリルを左右に振られるとつらいので、ここに限らず序盤からこのように押している。

今日出る前にツイートした問題に対し、熨斗袋さんによる解法がツイートされた。僕が未履修のアルゴリズムを用いており、適当にツイートした問題がとんでもないことになってびっくりしている。自分では理解できていない。該当ツイートを貼っておこう。

帰ってから、このブログに存在するなろう小説に関係する記事を2本更新した。

kotatsugame.hatenablog.com

kotatsugame.hatenablog.com

しばらくパソコンの前に座っていたが、非常に眠い。布団に入ってなろうも読まずに寝た。午前3時だった。

06/16(水)

午前8時に目を覚ます。二度寝のチャンスを探すべくそのまま布団でなろうを読んでいたが、なかなか寝られなかった。結局正午に再度就寝。その後、午後6時前後にも一瞬起きたようだが、その時はまたすぐ寝ることに成功した。

午後8時起床。木曜日のゼミの発表準備が一切進んでおらず、非常にまずい。とりあえず起きて典型90問を解いておいた。今日のはなかなか面倒で、簡単な書き方がわからないため、ゴルフはしなかった。

食事をしてゼミの準備に取り掛かる。午後9時半から午前6時半くらいまでかけて、一応の完成を見た。担当範囲が微妙に狭い気もするが、これ以上は準備が間に合わない。途中、教科書と同様の図を挿入する必要に迫られ、一瞬は教科書の該当箇所をスキャンして貼り付けようかと思ったが、結局TikZで頑張ってコーディングした。グラフで囲まれた領域を塗るのは、適当に書いたら一発で動いてしまったので、よくわかっていない。

ゼミの時間まで寝ようかと思ったが、布団に入ってからなろうを読み始めてしまった。朝方典型90問の問題が投稿され、今日のぶんもかなりゴルフしやすそうな問題だったので、それの自動submitの設定を行う。今日はdcで、N=1の場合分けを少し考える必要がある。僕が最初に書いたコードだとN=K=1のときにWAになってしまうようで、気づいた時は非常に焦った。その設定が終わってからもまだ寝ず、ずっとなろうを読んでいたが、午前10時くらいになって寝るのを諦めることにした。学食の麺の部が開店するのを待って学食に行く。

帰ってきて、眼鏡のレンズを拭っていたら、ブリッジの部分で折れてしまった。

仕方がないので昔のブルーライトカットの眼鏡をかけたが、顔のサイズに合っていないのか、耳にかける部分(先セル、モダンというらしい)が頭に食い込んで非常に痛い。我慢する。新しい眼鏡を買いに行くことを考え、同じ眼鏡が良いと思って、メーカー「Silhouette」のサイトでいろいろ探していた。取り扱っている店舗はあるようだが、どうやら商品が古すぎてもう作っていないらしい。非常に残念。

Silhouette光学メガネ | 世界最軽量メガネ

そのようなことがあっても変わらずゼミは始まる。

発表は、準備した内容が薄いので、途中式を丁寧に追ったりしていた。まあやっていることはただの計算なのであまり面白みもない。そんな中でも、最後のほうに出てくる\sqrt xで分けることで評価を改善するという手法は、頑張って作った図もあって良い反応を得られた。全体的に皆さん優しい感想をくださるが、自分では発表中に大胆に詰まってしまったり、よくわからないことをモゴモゴ言ってしまったりして、今日はかなりダメだった気がする。一人で落ち込んでいる。やはり準備はちゃんとしなければならない。今日のスライドもここにリンクを貼っておく。

Apostol_Chapter3_3.4-3.5.pdf - Google ドライブ

TikZは「ティックス」と濁らずに読むらしい、ということを教えてもらった。

ゼミ中に今日の典型90問がAtCoderに投稿されたらしく、ちゃんとACできていた。しかし今日は自動submitの設定をしていたのにFAが取れなかった。FAとの差が挟んでいるsleepよりも長いのが不思議だが、継続的にアクセスしすぎてレスポンスに時間がかかったのだろうか。そのあたりのさじ加減がよくわからない。存在しないURLに対してリクエストを送るのがどれくらいの負荷なのかわからない。今はsleep 1でやっている。

途中で、最近発売されて話題のラムネの飲料を飲んでいた。あまりおいしく感じられなかった。

ゼミ終了。日記を書いていたが、あまりにも眠く、まともな文章が書けていない気がしたので、すぐに寝ることにした。午後5時就寝。

06/17(木)

消えた。

06/18(金)

06/17 午後11時半にちょっとだけ目を覚ましたが、ちょっとなろうを読むくらいで、30分ほどしてまた寝た。

午前7時半起床。いい感じ。朝からatgolferで更新が流れてきたので、縮めておいた。その後また布団に戻り、ずっとなろうを読んでいた。

正午くらいに、今日の典型90問が投稿された。今日の問題は、中央値によって絶対値の和の最小化をするやつを縦横それぞれで行う。こういうのはOctaveが強い。absを取って行列の全要素の総和を求める、というあたりが関数を入れ子にしていて長そうだが、どうしようもない、はず。norm関数も試してみたが、コード長は変わらなかった。

午後1時になってから学食に行き、ラーメンを食べた。帰る前に、生協に入っている眼鏡屋に行ってみた。この店は昨日Silhouetteのサイトで調べた取り扱い店ではないようだったが、一応確認しておこうというつもり。一応注文はできるらしいが、やはりこれまで使ってきた眼鏡と全く同じものはもうないようだ。似ている(と僕が感じるもの)も見当たらないので、すっぱり諦めて、この店でまったく別のフレームを探す。

つるがかなり柔軟に曲がるリムレスの眼鏡、ということで2つくらい見繕ってもらって、そのうち1つに決めた。が、ちょうど在庫が切れてしまっていたらしい。もう一方のフレームはあるようなので、そちらを注文することにした。視力などを図ってもらい、折れた眼鏡を渡して同じ形のレンズを作ってもらうことにした。これで注文内容は完成で、値段は2万円弱。Silhouetteの眼鏡を注文するつもりで親に報告していたが、ずいぶん安く済んだ。出来上がるのは月曜日以降になるらしい。

レンズにブルーライトカットを付けるか、という話があった。最近、実は効果がない・悪影響を及ぼす、というような言説を見た覚えがあったので、それについて質問してみたが、成人してしまったらとりあえず悪影響を受けることはないらしい。効果のほどは人によりけりだそうで、眼鏡屋さんの薦めもあって付けることにした。

帰ってからメール返信。インターンの件だ。これまで僕が返信したすべてのメールは、CCが消えてしまっていたらしい。これはよくないことだそうだ。僕がCCを使う意味がよくわかっていなかったのだが、まあ選考過程にいるのだから、人事の方も見れるようにする必要があるのだろう。今日返信するメールではちゃんと気を付けておいた。

論理学のミニットペーパーを2回分提出した。今日が期限だったが、提出は任意らしいので、まあなくてもよかった。そろそろ論理学の中間課題の期限が近づいてきている。課題の内容は、何やらこれまでの講義内容に関連して自由にテーマを設定し、2000文字以下で文章を書くということで、かなり謎。何も考えていないし何も思いつかない……。

それが終わってから、今日のサークル解説会の準備をした。E問題の解説役のみが決まっている。僕はF問題をやろうかとも思ったが、どのようにして解説したものかとんと想像つかなかったので、D問題を解説することにした。まあ特に問題なく終了。

2021/06/18 定例会 | puzzleknot 公式サイト

yukicoder 300に出た。5完。

Aはよい。dcで最短、Perlで純最短。Bも簡単、こちらもdcで最短だが、純最短はRakuだった。

Cから難しい。最大値と最小値に分けて考える。最大値がi以下であるような数列の和は平均すればN\times\frac{i+1}2になる。これがi^N通りあるので、掛け合わせることでそのような数列の和すべての和が得られる。i-1以下の分を引くと、最大値がちょうどiであるような数列の和すべての和が求まる。最小値でも同様のことをする。

DはSCCして連結成分ごとにトポロジカルソート順でつなぐ。強連結成分の中身はそれぞれぐるっと一回りするのがよいかと思ったが、そのようなループが2つ以上あれば、全部まとめてぐるっと一回りするほうが辺の数を少なくできるようだ。1WA。

Eは\frac{A_iK}{\sum A_i}を見て振り分けると思ったが、WA。タイブレークでミスっていると思いいろいろ比較を試していたが、通らなかった。実は最初に先ほど述べた値で比較するというのが間違いで、選んだ時に確率に掛けられる値が最も大きなものから貪欲に選んでいくのでよいようだ。

Fは考えていない。yukicoderが終わってからすぐにCF #726 div.2に出た。E1とE2を落とした。

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

Aは大体\sum a-nになる。負の場合は1が答え。Bは、基本的に四隅のうち2点を選ぶのが良くて、実際計算してみると左上と右下を選んでも右上と左下を選んでも同じになる。Cはソートしていくらかrotateした感じの列になるが、列が2項しかない場合はちょっといじる必要がある。あるいは、rotateした後に先頭と末尾を入れ替えるのでもいいだろう。

Dはちょっと難しい。実験してみると、序盤はあんまり規則的に見えないが、ある程度値が大きくなると偶奇で答えが分かれている(偶数ならAliceの勝ち)ように見える。これをもとに改めて序盤の規則をとらえなおしてみると、基本的には偶奇で別れて、2べきの場合だけ別の規則があるということになる。この結論から迎えに行くことで証明も可能。奇素数を素因数に持つ偶数からは奇数に遷移できて、奇数からは偶数にしか遷移できない。2べきの場合は、2べきでない偶数または2べきで一つ前の数にしか遷移できず、前者に遷移すると自分が負けるため2べきに遷移するのが良い。ということで、こちらは2を底としたときの指数の偶奇に帰着される。20のときは別扱い。

Eは、あるprefixの繰り返しになることがわかる。が、そこから自分がどのような勘違いを経てコンテスト中のコードにたどり着いたかがわからない。ともかく何やらSuffixArrayを使って怪しげなコードを書いて、E1E2共にそれでpretestを通してしまった。システスで落ちた。

Fはそこそこ難しかった。適当にエスパーすると、全域木を取って操作してよいという方針が思い浮かんだが、何の正当性もなく、出したら当然のように落ちた。改めてちゃんと考えることにする。まず、グラフが2部グラフである場合は実は簡単。2つに分けた一方の符号を反転すると、操作は次のように言い換えられる:辺を選んで一方からkを引き、もう一方にkを足す。これは、辺を通ってkだけ移動していると見てもよい。グラフは連結なので、2つに分けた頂点それぞれの変化量の和が等しければ可能であることがわかる。

グラフが2部グラフでない場合を考えたい。三角形のグラフで実験してみたところ、3つの頂点に足す値の総和が偶数ならば、どのような振り分け方でも必ず可能であることが分かった。偶数でなければならないというのは当たり前で、より一般にグラフ全体で見ると足せる値は偶数なので、変化量の総和が偶数でない場合は当然不可能。偶数である場合かつグラフが2部グラフでない場合が残ったが、これは実は必ず可能ではないかと勘づく。証明はできなかったが出すと通った。

コンテスト後にEのupsolveをした。あるprefixの繰り返しになることまでは良い。文字列stについて、s+s+s\dotst+t+t\dotsの辞書順比較はs+tt+sの辞書順比較と等しい、という事実があって、これを利用するらしい。特に今回stも与えられた文字列のprefixなので、慎重にやればZ-algorithmで判定できる。どこまで一致するか見て、その直後の文字を比較するということ。辞書順比較についての証明はTwitterでいくつか見つかる。

後者、2-2の部分はちょっと言葉が足りないような気がしていて、僕としてはs+t=t+sの場合どうなるか考えたいところである。まあ実際考えてみると、適当に置き換えていくことでs_{inf}=t_{inf}が言えるので、OK。

日記を書いてから布団に入り、ちょっと考え事をしていたら、すぐ寝落ちした。午前4時だった。

06/19(土)

午前9時半くらいに目を覚ます。今日の典型90問を確認した。ちょっとびっくりするが、結局トポロジカルソートをK通り求めよという問題で、実装方針は様々あれどどうとでもなりそう。解けたので安心してなろうを読み、午前11時くらいにまた寝落ちした。

午後5時起床。1時間くらいそのまま布団でなろうを読んでいたが、モゾモゾ起きだして食事し、典型90問の実装をした。問題なくAC。トポロジカルソートにおいてソート済みの列を入れるvectorと、探索待ちの頂点を入れるqueueは、1つのvectorで扱うことができるようだ。何個の頂点をソート済みにしたかでループを回して、vectorにおけるその位置の頂点から出ている辺を処理する。そこで新たに探索待ちになった頂点も、問答無用でそのvectorに入れておけばよい。このような実装テクを用いても普通に書いて1000Bを超えてしまった。コードゴルフは面倒なので、放置。

TCB37が始まっていた。明日までなので、時間がある今のうちに解いておく。時間があるといってもABCまで2時間しかないが、まあそれまでには終わるだろうという読み。実際終わった。この週記が公開される頃にはイベントも終了しているので、問題の感想も書いておこう。ちなみに今回も理論値を達成することができた。

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

2問目は入力された2数の引き算をすればよい。制約からint型で十分だったようだが、いちいち確認するのも面倒なのでlongを用いた。4問目は入力に含まれる'f'の個数と数字を足せばよい。9問目は、ある点集合に対してはX座標とY座標のどちらでソートするかで2通りあって、どちらであっても真ん中で分割することになる。分割したそれぞれで再帰し、どちらのブロックで操作するかの順番を考慮しつつ掛け合わせる。10問目は一般の構文解析をしそうに見えるが、よくEBNFを見ると、いくつかのclauseが&で結合された形に固定されていることがわかる。それぞれのclauseが真となる条件は、\mathbb{F}_2上の演算としてとらえれば!a=a+1であることを鑑みて線形方程式で表せ、結局全体として連立方程式となる。2000行2001列の行列を掃き出し法することになるが、bitsetを用いることで十分高速にできる。

シャワーを浴びたりして時間をつぶし、午後9時からABC206に出た。全完。

atcoder.jp

Aからかなり面倒に見える。とりあえずAWKで通しておいた。Bは見たことがある。dc 8Bだが、念のため手元で確認していた。Cは適当にRuby。DからはC++を用いた。D問題はUFで、ACLのDSUは慣れていないため自前のライブラリを使った。

E問題は非常に難しい。サンプルが合っていないことに気づかず提出したりして、大変だった。まずx\lt yとしておく。x\mid yとなるものを引くと、各xに対しyの候補はR-x-\left(\frac R x-1\right)個ある。ここから互いに素な組を除きたい。各yに対し、y素因数分解し、各素数を選ぶか選ばないかで包除原理を用いることで、[L,y)にあるyと互いに素な数の個数がわかる。計算量的にかなり怪しいが、最大ケースであるところのサンプル3でも十分間に合うようだったので提出した。

一方Fは非常に簡単。区間DPとGrundy数。ただ慌てていたのか配列外参照してしまった。区間の両端の制約が1以上100以下ということで、区間の幅は99以下。DP配列を定義するときはこれを覚えていたが、計算の途中で100と勘違いしていた箇所があった。

コードゴルフをする。A問題は、冷静になると191との大小を比較するだけでよい。dc。さすがに負けたかと思ったが、勝った。B問題は見たことがあると書いたが、以前に全く同じ問題が出題されていて、十分にコードゴルフされていたということ。いつだったかの配信の途中で発見したもので、どうやらそれを覚えてい(てくれ)たらしい。1分未満で全く同じ回答が提出されており、負け。

X(X+1)2≥NX(X+1)2≥Nを満たす最小の整数XXは⌊2N+⌊2N−−−√⌋−−−−−−−−−−−√⌋⌊2N+⌊2N⌋⌋。

週記(2021/03/29-2021/04/04) - kotatsugameの日記

B - Savings

C - Go Home

Cは、先ほどはtallyを使って書いたが、普通にインクリメントしつつ引き算していくのが短い。AWK。Dはdfsしたほうが短い。Perl。Eはコンテスト後にkyopro_friendsさんの解説を読んで縮めておいた。Perlだと間に合わなかったがRubyなら何とか間に合う。さらにVimで縮んだ。Fは放置。

来週再来週とゼミの時間が微妙に縮むことになったらしい。1人が教育実習に行くということで、ゼミの発表順はある程度前後していたが、この機会に再度見直し、来週また僕が発表することになった。今週は不甲斐ない感じだったので、来週は頑張りたい。

布団に入ってちょっとなろうを読もうとしたが、すぐ寝た。午前2時だった。

06/20(日)

午前5時くらいに起きてしまう。

眠気がありつつ、寝られない。ずっと布団でゴロゴロしつつなろうを読んでいた。

途中で昨日のA問題のコードが縮まないか試していた。Rコマンドで所望の結果を得るために、3*しているのがどうにかならないかと思い、例えば190や192を使ってみたり、符号を反転してみたりしたが、どれもうまくいかないようだった。当然うまくいかないことは紙で考えればわかることだったろうが、念のため、と言いつつ実際は確認するのが面倒だったため、毎回提出してはWAを確認していた。

正午くらいにまた寝落ちした。次に午後4時半に腹を壊して起きる。確か今日は人権こどふぉだったよな、と思って時間を確認してみると、午後7時からということでまだ先のことだった。ということで、気にせずまたすぐに寝た。

午後9時に起きた。人権こどふぉはもうすぐ終了という頃合いだった。信じられないが、そこまで出ようとは思っていなかったので、特に気にせずそのまま布団でなろうを読み続けた。

日付が変わるあたりでTCB37が終了し、すぐ結果が順位表に反映された。8問目まで理論値という人はかなりいたが、蓋を開けてみると全体を通して理論値という人は3人しかいなかった。僕はタイム順で2位だった。10問目はbitset高速化だったが、TechFULのジャッジの速度を怪しんでいた人もいるようだ。これについては、いつだかのアップデートで(深い再帰がエラーになることも含め)解消されている、という認識。ほかにも、掃き出し法は上三角行列に留めることで定数倍が軽くなる、というのも効いていることに気づいた。当時は何も考えず、これしかないだろ!という感じで投げていた。

そのまま午前3時くらいまでなろうを読み続けていたが、また寝落ちした。結局この日は布団からほとんど出ていない。相変わらず読んでいるのは↓のなろう。最新話まで残り200話となっている。

https://ncode.syosetu.com/n5534co/