週記(2021/03/22-2021/03/28)

03/22(月)

週記を投稿してからはすぐ布団に入った。ハーメルンを開いて少し読み進めただけで寝落ちしてしまった。午前7時半だったようだ。

午後1時起床。布団の中でもぞもぞしていたら学食の営業時間が終了してしまったが、それはそうと床屋に行っておかなければならないため、何とか身を起こす。

購買でパンを買って食べ、床屋で髪の毛を切った。今日担当してくれた人は、体を覆うカバー(散髪ケープというらしい)の首回りをゆるゆるにしたり、使っているバリカンから信じられない音が出ていたりとかなり不安を感じたが、結果的には普通だった。

明日、帰省を予定している。行く機会が極端に減るだろうから、今日はゲーセンに行くことにした。ラーメンで腹ごしらえしてチュウニズムをプレイ。今日はしっかりカウントしていて、5時間半で25クレ使ったようだ。

Blackmagik BlazingでSSSを出せた。

最近追加された新曲の「Blackmagik Blazing」をプレイしたが、手が間に合わなくてお話にならなかった。

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

1日に何度もやるような譜面ではないため、今日最初のプレイで決まってよかった。いまだに今回のプレイがなぜうまくいったのか分かっていないが、とりあえず手は間に合っていた。いい感じに力が抜けていたのだろうか。また、以前何連奏かした時の経験から、後半で出てくる斜め3つのタップを擦ったのもよかったと思う。押そうとするとテンポが崩されたり、直後のノーツを押すのが間に合わなかったりして苦労していた。

さらに、前の木曜日のアプデで追加された13+の両方でもSSSを出せた。事前に譜面動画を見ており、速い連打だったり微妙にテンポの違う交互だったりが難しそうだなと思っていたが、実際にプレイしてみるとそれらは誤魔化せるものであった。

午後11時、帰宅。明日新幹線の切符を買うときにお金を下ろすだろうと考えて、今日はATMに寄らなかったのだが、そのくせ所持金をギリギリまで使ってしまったので夕食を食べられなかった。

布団に入って少しハーメルンを読んだが、すぐ寝た。午前5時。

03/23(火)

午前11時起床。帰省の準備をする。とはいっても別に着替えなどを用意する必要はないので、例えばノーパソのOSのアップデートをしておくとか、必要になりそうなデータをクラウドに上げておくとかである。

出掛けにLINEが起動しなくなって焦ったが、調べてみるとこれは僕だけの不具合ではないようだ。対策についてもすでに広まっていて、「AndroidシステムのWebView」というアプリを一旦アンインストールすると良いらしい。試してみると確かに起動するようになった。アンインストールすると、環境によってはChromeが使えなくなったりもしたようだが、僕の方はそういうこともなくて嬉しい。

リュックサック1つを持って午後1時に家を出た。仙台駅に向かい、まずお金を下ろして切符を購入する。すぐ新幹線に乗るわけではなく、しばらく駅前で遊ぶことにする。

まず昼食として、最近できた一蘭に行った。僕が並んだときは先に10人くらい並んでいたように見えたが、帰りは誰一人並んでいなかった。ちょうどピークとぶつかってしまったようだ。

次にゲームセンターに行った。駅前のゲーセンには、手元撮影用のスマホアームを設置している店舗がある。そこに行って、運良くスマホアームが設置された台に入れたので、1時間と少しプレイしていた。かなり調子が良くて、それぞれ1回プレイしただけで13+のスコアをどんどん更新できた。

folern 19-2-0はマジでビビった。13+でこんなに精度が良かったのは初めてである。ただ、今回アタックが出た箇所はかなりどうしようもないと感じているので、AJは遠そう。

時刻表を見て、タイミングを見計らって駅に戻った。地震の影響で臨時ダイヤになっていて少し戸惑ったが、ずれたおかげかやまびこ(東北新幹線の自由席がある列車)とはくたか北陸新幹線)がちょうどうまく接続しているものを見つけたので、それに乗ることにした。

やまびこは上りだからかかなり混み合っていた。大宮の1つか2つ前でたくさん乗ってきて、このご時世では信じられないことに、2人がけの席に2人で座ることになってしまった。降りるときに気づいたが、どうやら立ち乗りも出ていたようだ。それに対して、はくたかはかなりスカスカで安心だった。

車内ではラノベを読んでいたが、残り2、3ページだったのに駅についてしまって残念。駅から父の車で実家まで行く。途中で2軒の本屋に寄り、本を10冊購入した。

実家のWi-Fiで、今日撮影した手元動画をTwitterにアップした。以下のリプライツリーにまとめてある。先頭のものが、先に言及したfolern 19-2-0の手元である。

手袋をしたほうがプレイしやすいと感じるが、それを撮影するとどうにも不格好に思えてしまう。

AndroidシステムのWebView」の不具合修正のアップデートが来たようなので再インストールした。

新幹線で読みさしにしていたラノベを読了。「最強魔法師の隠遁計画12」。この巻からしばらくは、Web版で僕が一番辛かったところであるような記憶がある。書籍化にあたってショックな展開はいくぶん削減されている気もするので、ドンと構えて読んでいきたい。書籍版オリジナルヒロインの影響でストーリーも変わるらしいが、そもそも元のストーリーをすでに忘れ去っていて悲しい。

別の本を読み始めたが、かなり眠くなったので素直に寝ることにした。特にネット小説を読むようなこともなく、午前2時半就寝。

03/24(水)

午前8時半起床。ちょっと目を覚ましてスマホを触ったら、それから二度と眠れなかった。起きると食事を用意してくれそうなので、起きた。

朝ご飯を食べて読書。それから昼食を挟んで午後5時までかけ、「現代社会で乙女ゲームの悪役令嬢をするのはちょっと大変2」を読んだ。

今巻も非常に面白い。Web版だといろいろな話がぐちゃぐちゃに入り乱れているという印象を受ける(もちろん、書いている本人には一貫した流れというものがあるのだろうが……)が、書籍になる際に統廃合されてかなり読みやすくなっている。

また政治経済の話は、Web版ではほとんど読み飛ばしてしまっていたが、しっかり読み込むとまた一層面白さが増すことがわかった(このせいで読了にかなり時間がかかった)。もちろん細かい話にはあまりついていけないが、少なくとも人の名前と陣営をちゃんと記憶するだけでも良さそう。

帯には、1巻発売直後からSNSで話題沸騰とある。3巻の予告も巻末についていた。次は夏らしい。好きな作品が書籍化されて、売れ行きが好調である、ということほど良いことはない。

次に「お隣の天使様にいつの間にか駄目人間にされていた件4」を読んだ。最高。Web版を読んでいる人には伝わるだろうが、今巻の最後の方は体育祭である(これは目次からわかる情報なのでネタバレにはならないだろう)。この作品の体育祭の部分は最高であることが知られている。その少しあとの部分も好きなのだが、そちらはこの巻には収録されていなかった。おそらく5巻の冒頭に入るはず。非常に楽しみである。

DDCCの移動に関して考えていた。朝は12時半集合だとわかったので、当日出発することにしても朝は十分余裕がありそう。問題は帰りである。

コンテスト終了は午後6時半で、このご時世なので懇親会などは存在しない。しかし、この時間から帰っても家にたどり着く前にARCが始まってしまうのだ。ARCの前に家に帰れないなら、ARCの後に帰るしかない。

後泊をするのが最も良いはずだが、それは流石にもったいないような感じがして尻込みした。改めて時刻表を確認していると、2012東京駅-2257富山駅という新幹線を発見。これに乗って車内からARCに出場するのは不可能ではないだろう。後ろ3分(降車準備を含めると8分くらい)コーディングできないのはちょっと怖いが、うまく2100-2300を含むような列車は存在しないのでしょうがない。また、2104-2315という列車もあるが、コンテスト開始直後に乗車するようなスケジュールよりも、コンテスト終了直前に降車するほうが幾分マシだろう。他にも、富山駅の1つ前で降りることで駅のホームでのコーディングにも10分程度のまとまった時間を取る、ということも考えられたが、これは迷った結果富山駅まで行くことにした。この決定を後悔することがないようなコンテストでありますように。

深夜、コードゴルフで新手が出ていくつか最短コードを取られた。

atcoder.jp

atcoder.jp

入力をシェルコマンドで加工してdcに渡すとき、わざわざ?で読んでいたが、<<<でdcコードに直接埋め込んで渡すと短くなるものがあるらしい。?を2回以上呼ぶものと、逆順ソートして上から数行読むもの。逆順ソートは、埋め込むことにすると下から数行が簡単に取れるので通常のソート順で良くなる。

この更新には粗が存在しなさそうなのでどうしようもない。ただのdcで無理やり解ける問題があったので、それで1つだけ取り返したのが精一杯であった。

午前1時就寝。

03/25(木)

午後1時起床。最近うまく眠れなかったぶんを取り返そうとでもしているのだろうか。

食事して、最寄りのみどりの窓口まで行って切符を購入する。昨日決めたとおりの日帰りの乗車券と特急券だ。22950円だった。DDCC運営には仙台駅から乗ると言ったのに、富山駅から乗って行くことになってしまったので、ちゃんと交通費を出してくれるか不安な部分もある。念の為メールで確認しておくことにした。

帰ってきてから読書。「公女殿下の家庭教師8」を読んだ。この巻で一区切りついたようだ。Web版からの加筆で、まだWeb版の方でも明かされていなかったはずの設定が出てきてびっくり。

帯にシリーズ20万部突破と書いてある。こちらは8巻で20万部、「お隣の天使様にいつの間にか駄目人間にされていた件」は4巻で30万部らしい。うーむ、ここまで差がつくのか。しかし書店では「公女殿下の家庭教師」も結構プッシュされているような印象を受けるから、天使様が圧倒的なだけで売れているほうなのだろう。

最近スマホTwitterクライアントが頻繁に固まって落ちるので、昨日、ちょっと調べてキャッシュとストレージを消した。合わせて800MBくらいあった。それ以来一度も固まっていないので、かなり効果があったようだ。

もう1冊ラノベを読んでいたが、こどふぉがあったので出た。CF #710 div.3。40分で全完、Dでペナを出して11位。

Aはよい。Bは文字列を直接見ていく実装を頑張ったが、先に'*'だけ取り出してしまうと楽だったようだ。Cはやるだけ。Dもやるだけに見えたが、nが奇数のときに必ず1つ残ることを見落として1WA。非常に難しい。

Eは自由になる要素をqueueで管理するかstackで管理するかで最小・最大を分けることができる。面白い。Fはビビるが、グラフの形がシンプルなのでできる。入力が不親切。制約の文言も不親切。Gは'z'から・'a'から決めるとか謎の方針を産んでしまったが、結局は冷静になってやるだけ。

読んでいたラノベを読了。「暗殺者である俺のステータスが勇者よりも明らかに強いのだが4」。前の巻の刊行から2年が経過しており、内容やキャラクターをかなり忘れてしまっていたが、それは出版側もわかっていたのか冒頭にキャラ紹介やあらすじが付いていて助かる。細かいことを忘れてしまっていても面白かったので、すごいなあという気分になった。

文章に何かしらの特徴を感じたのでちょっと考えてみたが、どうやら会話文が極端に少ないようだ。大半は視点キャラの独白で進行する。このあたり、ちょっとした仕草から読み取らなくても独白で心境などを事細かに描いてくれるので、頭を使わずに読める、かもしれない。

この本の帯にも出版部数が書いてあった。シリーズ4巻(+漫画化3巻?)で驚きの80万部だ。先に挙げた2シリーズを大きく引き離している。そこまで人気だとは思えないのだが……。

1巻が出版されてから3年経っている、という理由かとも思ったが、とはいえ1巻は最初の1年で6刷されているので、最初から売れているらしい。

この作家は僕と同い年のようで、大学受験の直前の11月と直後の3月にそれぞれ本を出版している。流石にヤバすぎる。3月に出した本には、無事大学生になれたとのことが書いてあった。

午前3時半就寝。

03/26(金)

正午、起床。UTPCのため、起床時間を昨日より遅くするわけにはいかなかった。

食事してラノベを読む。「転校先の清楚可憐な美少女が、昔男子と思って一緒に遊んだ幼馴染だった件」。最近こういう「男友達のような距離感の女友達(美少女)」をヒロインに据えたラノベをよく見る気がする。これも同じ系列の作品に思えて、ラブコメとしてはまあ……普通だという感想。ちょっとしたお色気シーンで、男友達の感覚だったヒロインが見せる女らしさに主人公がドギマギするというのもテンプレートだと考えて良い。1点、主人公とヒロインの関係を学校ではひた隠しにしている、というのは結構僕の好みの設定だと思う。

さらにもう一冊。「幼馴染の妹の家庭教師をはじめたら3」を読んだ。前の巻でヒロインと主人公がくっついて、作者もそこで一区切りだと考えていたようだが、続刊を出せたので出したらしい。新ヒロイン登場。主人公は彼女ができた余裕が現れてモテ始めているらしい。これは好きな設定。ネタバレになってしまうが、新ヒロインはこの巻の最後で告白するところまで行く。それをバッサリと断ってしまうあたり、態度がハッキリしていて現実的には好印象だろうが、ラノベ的には大丈夫か?と心配になってしまう。

昨年のICPCの写真が公開された。これは僕(灰色のパーカー)が企業賞をもらって両手を挙げて回っているところ。

yukicoderに参加した。Cで詰まって、Fもかなり難しく、結局Gが間に合わなかった。

Aは値の小さいものから貪欲に取って損しない。Bは食い違うindexをsetで管理する。Cはコンテスト後に解説を読んでupsolveした。N==Kのとき(だけ)が難しいと考えていたのは正しくて、全員がなるべく均一に誤答するというのも正しかったようだ。そこからAを使って穴埋めするのが間違っていた。Dは頑張ると解ける。添字を1ずらしたりしそうだったので丁寧に書いていたが、結局そういうことはなくて綺麗な式になった。

Eは難しかった。最初は使う航空会社を決め打って、頂点をマージしてからグラフ上の最短経路に帰着すると思っていたが、できるグラフが木ではないことにLCAを書いてから気づいて絶望。改めて考え直し、航空会社の間に辺を張って最短経路問題を解くと良いことがわかった。せっかく書いたLCAが無駄にならなくて良かった。

Fは値0だけ特別扱いして、ほかはmod 2^10でまとめてカウントする。Gも同じ要領で解けて、今度は値0と1を特別扱いして頑張る。A_i==0なる値が出現して以降は常に0になることに注意。

夜、ラノベを読みつつGCJ qualに出た。30点取れば良いらしい。

Aは愚直に計算する。Bは最後の1文字を持つDP。Cは逆順に値を埋めつつ適当な区間をreverseしていくと上手くいった。これはほとんど直感で導き出した答えだったのでびっくり。Dは要素を2つ選んでpartitionとするようなクイックソートができる。再帰的に適用して、2段階目以降は呼び出し元のpartitionと比較することで2つ選んだ要素の大小もちゃんと判定できる。Eは諦めた。

溜めていた日記を書いて、午前4時就寝。

03/27(土)

午前12時半起床。急いで食事をし、UTPCに備える。

AGHの満点とDEの部分点を取った。いろいろ手を出しては見たものの、あまり解けなかった。

Aはよい。二分探索しかないと思っていたが、線形時間でも解けるらしくてすごい。Hもまあよい。Gは、最初ある2行を選んでflipしていたが、このとき対角成分の符号を変えないようにするとずれる。正解は対角線上で交わる行と列を同時にflipすること。

Dは、Mがdistinctだとすると、選ぶ人で最もMの値が小さい人を決め打って、それより大きなMの値を持つ人からK-1人選ぶ全ての場合について1/Mの積の和が求まればよい。これはMをソートすると前からdpで計算することでO(NK)で部分点が得られる。distinctでない場合もソートで順序付けしたと考えれば良い。満点は、上の式を多項式の積と和に言い換え、積と和をペアにして持つことでセグ木のようにマージしていけるというもの。多項式の積に言い換えるのはわかったが、そこから適当に係数をいじることで積のまま和を求めようとして失敗した。結局多項式の1点しか見ないので、全体を和で持つという発想がなかった。

Eは、ある区間をまとめてソートするとしたとき、どの2つの区間に分けてソートしても同じ結果にならないときだけ遷移できる。区間を決め打ったときにそれがvalidかを計算するのはどうとでもなるはずで、これはO(N^2)。部分点。

Jをupsolveした。Aをマージしようとすると、x,x,x+1があったときに2x2x+1のどちらを作るべきか一意に定まらない。Bを分割するとよいようだ。これは全然考えなかった。さらに、Aより先にBを使い切るのもダメだということを見逃していくらかWAを重ねた。

Aをdcで、GをOctaveコードゴルフしておいた。Gは普通のbit全探索をOctave風味に直したコードで書いたが、bitを並べた行列は対称性があるため、hadamard行列のように名前が付いていて関数で一発で生成できるかもしれない。

夜、外食して帰りに本屋に寄った。本を10冊買った。

「時々ボソッとロシア語でデレる隣のアーリャさん」は、前回本屋に行ったときは在庫切れで、重版の予定も出ていなかった。本屋に行く前にネットで確認すると、依然「取扱不可」の表示で諦めていたが、念の為探してみるとしれっと入荷していた。奥付を確認すると再版だったので、無事重版してくれたのだろう。

帰宅してABC197に出た。24分全完で2位。Eで勘違いしてしばらく詰まっていたのが痛い。

Aはよい。Bは面倒。Cもよい。Dは面倒。Eは区間の両端さえ考えればよくて、これは前にCFで見た。バチャだったかもしれない。Fはパスの両端を持って縮めていく。

Aの最短はVim。明らかな5B解が存在して、1秒差で負けた。

Bは、最初はスタートから順に置換するのを連鎖させる方法でPerl 140Bを作ったが、マッチした文字列の長さを見ると良いようだ。横はともかく縦が面倒で、transposeを使ったり、行の幅で割ったりしている。CはRuby再帰する。再帰の呼び出しに入力をそのまま埋め込んでevalすることで縮められて、このとき先頭の1要素だけ初期値に抜き出すのが簡単にできる、ということで抜き返した。DはRakuで複素数を使う。

EFは手付かず。Fは嘘解法が通るということで書いてみたが、TLEしたし、そもそも提出する前にafter_contestが追加されていた。

UTPC-Aの最短が取られていた。線形時間で計算する方法にも2種類、前から見るものと後ろから見るものがある。僕は前から見ていたが、dcはスタックの言語なので後ろから見るのも比較的簡単に書ける。これでループ部が改善することもあって-2B。

「ブラックな騎士団の奴隷がホワイトな冒険者ギルドに引き抜かれてSランクになりました3」を読んだ。清々しいまでのチートもの。まあ主人公が強いのは良いことなので、よし。キャラクターをほとんど忘れていたので、最初のほう男だと思って読んでいたキャラクターが女でびっくりしたりもした。剣聖と言われると何もなければ男キャラクターをイメージしてしまう。

夜寝る前、ARCの配点が出た。345588。全完チャンスか……?最近の800は難しいので、なんとも言えない。ただ4問目までで詰まると人生が終了することは確かか。

午前2時就寝。

03/28(日)

午前7時半起床。昨日今日と朝に検温している。これはDDCCからのメールに書いてあったこと。寒い中で計ったのが良くなかったのか、36.3℃と36.1℃だった。流石に平熱がこれであるということはないだろうが、とりあえず発熱はない。

GCJが終了したので結果を見た。Bのhiddenが落ちていた。なぜ落ちたのかわからないのでTLで聞いてみたところ、バグを教えてもらった。

点数的には69点なので、無事Round 1に進めた。

食事してノーパソやノート・筆記用具などを持ち、富山駅まで送ってもらった。午前9時の新幹線に乗って一路東京へ。車中では円城塔「文字渦」を読んでいた。ちなみにこの日記を書いている時点でまだ読み終わっていない。

ここから先の話は、別に参加記を書いた。

kotatsugame.hatenablog.com

帰りに新幹線から出場したARC116について。開始直前にスマホの電波が不調になるなど大変焦ったが、なんとかスムーズに問題を見ることができて助かった。

結果はEまでの速解きで28位、パフォーマンス2937、レートは2662→2692(+30)。

A問題は明らか。この明らかさはむしろコーナーケースへの疑いが強くなるが、自分を信じて提出した。B問題は適当に書く。C問題は比に言い換えると総積がM以下となる。2e5以下の素数を列挙して、それぞれどこに割り振るか決める再帰全探索を、ちょっとした枝刈り付きで書いてみたところ、サンプルの最大ケースでも速かったので提出した。計算量はよくわからない。Dを開いたらまた数え上げで笑ってしまったが、こちらは1桁ごとに見るDP。瞬殺。

Eはパッと見二分探索+DFSだが、正当性がよくわからなかったので、一旦順位表を確認。そこそこ良い位置についていて安心するが、すでにSSRSさんが5完していて目を剥く。こんなに速いんだから、どうやらさっき考えた適当なDFSで良さそうだと見当を付けて実装した。再帰関数が返す値を上手くイメージしておらずちょっと戸惑いつつもサンプルがあったので提出。すると1ケースだけ落ちてしまった。しかし幸運にも適当に試したケースがWAのケースだったので、すぐに修正できてAC。ちなみに落ちたのは、根に直接情報を伝達する必要があるかの判定ミスだった。

Fもよくわからないので、とりあえずA問題とB問題のコードゴルフをした。Fに戻って考えてみる。例えば、全ての数列の長さが2以下だったら楽だろう。長さ2の数列のどちらを選択するか?ということのように、先頭と末尾のどちらかを削ることによる利得がプレイヤーによらず定まって、高橋君はその大きな方を、青木君は小さな方を選択するというようにできないだろうか?結果的に言えばこれは正解の方針だが、コンテスト中の僕は利得をプレイヤーによらず定めるところで躓いてしまった。

ここでサンプル2を眺めつつ、大胆に予想を打ち立てる。数列の真ん中の方の値しか関係ないのではないだろうか?これは、自分が真ん中からずらそうとして削っても、相手は反対側を削ることでそれをキャンセルできる、ということからわかる。この考察には既視感があった。奇数長の列の真ん中を取り、偶数長の列は真ん中2つだけ見ることで、全ての数列の長さが2以下の場合に帰着できた。

しかしこれは合わない。奇数長の列の真ん中を取るのではなく、真ん中3つを見て適当に定めると良さそう。このとき、場合分けして計算した結果から、自分から選択すると相手に邪魔されるので、どうしても損してしまうことがわかる。つまり奇数長の列を考えるのは後回しになりそう。実際にどちらが選択することになるのかは、偶数長の列の個数の偶奇で定まる。これを実装するとサンプルが合うが、WA。そのまま修正できずコンテストが終了した。

終了前の数分を争うような状況にならなくて良かった、という思いもあるものの、全完していない以上、半ば諦めてしまっていた自分の弱さも感じてしまう。

コードゴルフについては、Aをdcで、BはRubyで書いただけ。dcはRで出力文字列を持ってくる関係上|コマンドを使うのが定石だが、TLEしてしまったのでおとなしく4%1+Rとした。Bは適当に書いて同値な変形を繰り返す。modの値を変数に入れるとき、そのまま和の変数を初期化しても良い、つまりsum,mod=0,998244353sum=mod=998244353が本質的に同じであるというのはよく使う面白いテク。

帰宅する。風呂に入った後は眠すぎたのですぐに寝た。午前1時半だった。