週記(2022/01/17-2022/01/23)

01/17(月)

先週の週記を投稿してからの話。購買が開店したので、注文した本の受け取りをするつもりだった。しかし、午後4時半から予定されているインターン先の定例会まであまり時間がないという事実が重くのしかかってきて、睡眠時間を確保するために今日は諦めることにした。さらにすぐ眠ればいいものをついついラノベを読み進めてしまい、布団に入ったのは正午を回ってからだった。そのうえしばらくTLを眺め、午後1時就寝。

午後4時半、目覚ましで意識を取り戻す。ボーっとした頭でもう少し寝ようと考え意識を失う直前に、すでに定例会開始時刻であることに思い至った。全身から冷や汗を噴き出して跳ね起き、ミーティングに接続。幸いと言うのもなんだが、3分程度の遅刻で済んだので特に言及されることもなかった。自分の進捗報告までにはいくらか時間的余裕があるので、ほかの人の話を聞きつつサッとスライド作成。先週は業務を期限に間に合わせるため個人的には頑張ったつもりで、そこから得た所感など盛り込んだら1ページ埋まった。発表も問題なく終了。

今日の勉強会の内容は、先日最終結果が出たKaggleのサンタコンペの解法についてだった。正直あまりよく理解できていないものの、とにかく上手い構築があったうえに必死の短縮が行われていたらしくスゲーという気持ちになった。特に、順位表で1文字縮むとわからなかったら自分たちも縮められなかった、というような言葉が印象的。これはコードゴルフにも通じて、もちろん似たコードを弄っていたら同じ短縮が効くのはそうだが、まったく異なるコードを弄っていても1人でやるよりは誰かと競うほうが短くなりがち。誰かにコード長で後れを取ると、その悔しさからより粘着して考えることになるためだ。また特に関係ない話で、「下界」を数学用語として使う場合の読みが「かかい」であることを知った。「下限」との対応を取っているのではないかというツイートを見てなるほどなあと思った。

定例会を終えて学食に向かう。一歩外に出るとあまりにも寒くてびっくりした。家の周囲は雪が全く残っていないようだったので自転車を出したのに、大学近くの歩道は踏み固められたのか微妙に残っていて肝を冷やした。食事を取り、ミールカードの今日分の残高で飲み物を購入して即座に帰宅した。

ボルテが10周年らしい。流れてきたツイートのイラストが良すぎて目を惹かれた。もう数年ほどプレーしていない。チュウニズムでは譜面を見たり運指を覚えたりなど座学も頑張っていたのに、ボルテはそういうことを一切行わなかったため、あまり上達もしなかった。比較してチュウニズムのほうが楽しく感じられたのだろう。今はもう他機種をプレイする余裕があるほどゲーセンに通えてすらいない。

ラノベを2冊読了した。1冊目は「俺は星間国家の悪徳領主!」4巻。これが今出ているシリーズ最新作になる。やはり面白かった。先週書き忘れたことだが、主人公の行動を周囲が勘違いするのとは逆に、周囲の行動を主人公が勘違いするほうも丁寧に描かれていて、なるほどそういう解釈があるのかと驚きも2倍であった。またキャラクターたちの行動が複雑に組み合わさって主人公の王道を演出するギミックも、相変わらず巧妙に思える。

2冊目は「西野 ~学内カースト最下位にして異能世界最強の少年~」9巻。内容を読むのはつらいが設定はめちゃくちゃ面白い、ということを何度も言っている。単純な話、主人公が世界最強なので良いと感じているのだ。しかしこの辺りの巻はそういうバトルシーンがほとんどなく、どんどん読むのがつらくなってくる。主人公の外見と態度のミスマッチがこれでもかと強調されているのが、場違いさを際立たせる。どうやら自分はキャラクターが場違い・身の程知らずな行動をするのが苦手らしい。10巻はあらすじなどを見る限りそういうバトルシーンがありそうで期待が持てるものの、あまり読む気になれないので、次に手を付けるラノベとしては選ばないことにした。

「話の出しにする」の表記が「出汁」でないことを知った。いや、「出し」の意味として出汁が含まれるので、おそらくニュアンスとしては一致しているはず。片方は話題を、もう片方はうまみ成分を抽出しているわけで、しかし「出汁」と書くと完全に食品関係の話になるということだろう。

日記を書いて布団に入り、ラノベを開いて少し読み進めた。午前6時就寝。

01/18(火)

午後3時、腹を壊して飛び起きる。ベッドとトイレを2往復くらいして一段落ついたところで、二度寝するのを止めて生協に行くことにした。

購買が閉まって同時に学食の夜の部がスタートするのが、午後4時だと勘違いしていた。実際は午後5時。雪が降る中早歩きで来たのに閉まる気配がみじんもなくて拍子抜けした。腹痛も再度ぶり返してきたので、生協のトイレに寄りつつ、購買でパン類を購入し、注文していた本を受け取って帰宅した。惣菜パンを食べてまた外出。今度はゲーセンに行く。

夕食を挟みつつ、午後6時から閉店までいた。今日はありえないくらい上手な日で、大量の成果を出せた。諸々伸びたものは省略するとして、理論値が6譜面、14+のSSSが1譜面、15のSSが1譜面。適当に選曲したものが理論値、ということが3回起こって、はっきり実力が向上したのを感じた。緊張に負けない心臓も身についてきているかもしれない。

結構前から1落ちは出ていた譜面で、Lv.13では初めての理論値。直後にもう1譜面出ている。下の部分が問題で、微妙に速い階段とフリックが同時に来るため焦ってしまい、非常に勝率が低かった。端フリックで取ることで手の動きを減らすと多少はマシになったので、あとは通るまでひたすら連奏していた。幸いそれ以外の部分は特に難しくないため挑戦回数はそれなりに稼げて、25連奏で出た。

f:id:kotatsugame:20220119042523p:plain
61、65、69、73小節

曲が好きすぎて定期的に選曲している。今日2回目で出た。

www.youtube.com

家を出る前に攻略動画を見て少し座学していた。序盤のフリックは、逆の手でホールドを押すことを一切諦め全押しのようなことをしていたら軽傷で済んだ。そこを終えて8000点弱、速さがよくわからないトリルで削られて6000点。ホールドトリル地帯は全押しの力の入れ方を理解した。恥をかなぐり捨てて腰を落とし、エアーを取る方の腕は上げるとき力を抜く。そこを抜けて何とか3000点残っており、あとは全力で叩いたり擦ったりしたら耐えきれた。プレイ中の記憶があいまいなので1000点くらい誤差があるかもしれない。ともかくこれで解禁済み全曲SS、OPはすでに90%に迫るくらいあるので金ポゼッションを飛ばしてプラチナポゼッションである。実は15の未解禁譜面が祈を含めて他に4つあるので、寿命は短いかもしれない。いや、祈は許容が大きいから何とかならないだろうか。混沌はノーツ数が2800個と15の中では少なめなのでかなり難しかった。

今日最後のクレの最後のトラックで選曲したら出た。今日一発。14+の未鳥は解禁済みだと残り3譜面になる。序盤がうまく行って終盤もうまく行ったので乗った、としか言えない。特殊な運指は全く組んでおらず、いわゆるお前の弁当地帯もそれっぽく押している。今日はこことその直後のホールドトリルがありえないくらい上手かった。ホールド階段を抜けてまだ8000点残っているのを見てびっくり。しかしラストのタップスライドに入る直前にはすでに7500点台まで削れていて、最後祈りを込めて擦ったら無傷だった。あと赤3個出したらアウトだったと思うと、今更肝が冷えてくる。

新春TechFUL Coding Battle 2022の順位表が更新されていた。自分は11位。そ、そんな……。ボス問以外理論値なのに、1問崩れるともうどうしようもなくなる。

SRM822に出た。2完15位で2455→2487(+32)。前回の傷は深い。

https://community.topcoder.com/stat?c=round_overview&er=5&rd=19013

Easyは最後のサンプルの説明文に「2/3」と見えたのに、立式してみると合わない。よく読むと「almost, but not exactly, equal to 2/3」など書いてある。試しに作った式で値を計算すると、サンプルの答えと一致した。許容誤差を考慮しても2/3は異なる値なのでなにが「almost equal」やねんという気持ちになった。それ以外は普通の問題なのにこういうところで評価を落としにくるのは何なのか。

Medは、まず\{1,1,1\}なら勝てる。1が1つ足りない場合は、代わりに「次に\{1,1,1\}になるもの」があればよい。つまり\{1,1,2,2,2\}である。同様に\{1,1,2,2,3,3,3\}もできそう。こう考えると、値の大きな方から3つ見て(x,x,x)だったらx-1にまとめる、というのを繰り返して最後に\{1,1,1\}が得られればよさそう。それぞれの要素にはもとになったインデックスをvectorで保持しておく。マージは愚直にやっても間に合うだろうが、念のためマージテクを使っておいた。下のツイートのような考え方もあるらしい。こちらはかなり美しい。

Hardに40分程度残したはずだが、考えているうちに寝入ったりしていた。Hardが提出2、AC1であったこと以外は普通の問題が並ぶコンテストだった。

火曜日のPythonの講義からキーワードを抜き出して提出するやつをやって、日記を書き、布団に入った。午前6時だった。生活リズムを安定させるには、昨日と同じ時間に布団に入れたのはかなりいいことだな……と思っていたのに、眠気が薄いからと言ってラノベを開いた結果、1冊読み切ってしまった。

「プリンセス・ギャンビット」。学園を舞台にゲームで勢力争いするのはそれなりに多い設定とはいえ、そういうものの本題は独自ゲームなり勢力争いのルールを設定して、その穴を突きまくることにある。この本でもいくつかゲームのルールが導入され、プレイヤー同士がひたすら搦め手を使って戦う様子が描かれた。読むと疲れるので、実は苦手な部類なのかもしれない。大体は相手を罠に嵌めてすんなり勝っていたが、1巻ラストのゲームはかなりまともに心理戦をしていてよかった。ところで「ギャンビット」とはチェスにおける定石、特に自分のポーンを犠牲に盤面での有利を取るもののことらしい。この話でヒロインが犠牲としたものは何だろうか。今のところは、すべてのゲームに勝ち抜いた後の地位だと考えられる。

読み終えると昼前になっていた。木曜日の午後1時からはゼミがあるので、その近辺に睡眠時間をぶつけるような生活リズムは避けたい。そのため本来なら今から寝るのは言語同断だが、すでに眠気もかなり強い。何とか生活リズムをずらそうとハーメルンを開いたりラノベを開いたりして、午後0時半まで耐えてから寝た。

01/19(水)

消えた。

01/20(木)

01/19 午後9時半起床。といっても、ここから活動を始めるとまた朝方まで起きていることになって今度こそゼミ出席に失敗するので、何とか二度寝の範囲内で再入眠したい。布団に横たわったままハーメルンを読み始めると、これが面白く、途中一瞬起きて食事を摂りつつ数時間ずっと読んでいた。午前3時くらいに訪れた眠気に身を任せ、就寝に成功。5時間以上覚醒していたとは言え、その間ほぼずっと布団に横たわっていたので、まあ二度寝と言えなくもない……か?ともかく、この時間に再入眠できたのは良かった。

次に午前7時半起床。微妙な眠気を振り払ってハーメルンを読み進め、午前10時頃読了。「剣姫転生 〜エルフの娘は世界最強の剣士を目指す〜」。無職転生の二次創作。非常に面白かった。オリ主は最初からヒトガミの関与を跳ね除けたため、あとはルーデウスの苦悩を伝聞形式で聞くくらいとストレスフリーな展開になっていたのが個人的にうれしいところ。原作の流れは結構忘れてしまっていたので、ルーデウスの行動が描写されないのも相まって後半はちょっとついていくのが大変だった。

syosetu.org

さらにお気に入りに入れていた読了済みのハーメルンの更新を漁り、午前11時半ごろ布団から出た。英語のDMが届いていて、「a window to」と見えたので知らないイディオムかと思って調べたものの見つからない。文面をよく見直すと「widow」だった。これは「未亡人」という意味らしく、そのような単語を含むDMは当然スパムである。

シャワーを浴びた後学食に行き、予約していた本を受け取る。今日はファンタジア文庫の発売日で、今月は5冊を予約していた。どれも楽しみにしていたものである。午後1時になる直前に帰宅して、ゼミ。

先週作成したスライド分がまだ終わっていなかったので、今日最初の30分ほどを使って終わらせた。ルジャンドル記号の読み方がわからないのでいちいちつっかえてしまう。また、本来黒板発表の準備のためだけに作ったスライドだったので、情報をギチギチに詰め込んでいるページがあって読みにくかった。「no less than」の訳として「下らない」を使ったところ、「取るに足りない」の意味に聞こえるという指摘を受けた。下に貼ったPDFでは「下回らない」に直してある。特に関係ない話だが、下回らないの意味だと「下る」+「ない」であるところ、取るに足らないは「下らない」で一語の形容詞となるらしい。

Apostol_Chapter9_9.1-9.6.pdf - Google ドライブ

僕と同じくTeXで書いた資料を使っている人が、3点リーダーの位置について指摘を受けていた。どうやら常に「dotsb」を使っているらしく、カンマ区切りの列挙の省略ならldotsを使いましょうということを言われていた。また、dotsならどの3点リーダーとなるか自動で判定してくれるということも言及された。ところで「dotsb」は初めて聞くコマンドである。調べてみると、ldotsやcdotsという位置だけ決められたもののみではなく、2項演算子の省略のための「dotsb」、コンマの省略のための「dotsc」など思ったよりたくさんの種類があるらしい。dotsはそれらを使い分けてくれるという理解でいいのだろうか。思ったより高機能であった。

ゼミ中に、コインハイブ事件の上告審の結果が出ていた。控訴審で出された有罪から逆転し、ついに無罪を勝ち取ったらしい。何か支援をしていたわけではないが喜ばしいことである。以前「控訴審では最高裁に判断を委ねるためわざと第一審と逆の判決を出した」という言説を見た覚えがあって、コインハイブ事件が当然無罪だと考えていた自分にとっては受け入れやすい論理だったので覚えていたが、友人に確認したところそのようなことが起こるとは考えにくいようだ。控訴審で相変わらず無罪でも重要事案なら検察側が上告するから、ということらしい。

判決では、コインハイブの反意図性は認められている。反意図性とは「当該プログラムについて一般の使用者が認識すべき動作と実際の動作が異なる場合に肯定されるもの」であり、「一般の使用者が認識すべき動作」は「当該プログラムの動作の内容に加え、プログラムに付された名称、動作に関する説明の内容、想定される当該プログラムの利用方法等を考慮」して認定されるようだ。WebブラウザがWebページを表示するだけでも複雑怪奇なプログラムが実行されるとは言え、それらは概ねWebページを表示する・動作を軽量化する目的で動いていると考えられるし、その上Webページに見たくもない広告がくっついてくるのも最早想定される範囲と言える、しかし知らないうちにマイニングが行われるのはさすがに想定できない、ということらしい。それはもう、マイニングがまだ一般的な技術ではないだけじゃないだろうか?

一般的なウェブサイトにおいて,運営者が閲覧を通じて利益を得る仕組みとして広告表示プログラムが広く実行されている……(中略)……ウェブサイトの収益方法として閲覧者の電子計算機にマイニングを行わせるという仕組みは一般の使用者に認知されていなかったことといった事情がある。

裁判例結果詳細 | 裁判所 - Courts in Japan

ところで、この事件について担当の弁護士が出した以下の文章は自分にとってかなり衝撃的だった。論理的であろうとすると言葉尻を捕らえられて不利になるなど、聞くだけでも絶望的である。取り調べの過酷さも印象に残った。

ゼミが終わってからすぐ布団に入り、ラノベを開いたはず。しかし即座に寝落ちして、起きたのは午後10時半だった。

そのまま読み続けて1冊読了。「お隣の天使様にいつの間にか駄目人間にされていた件」5.5巻。時系列的には2人が付き合う前、つまり4巻までの間の出来事が描かれた短編集である。まだ溶け切っていないヒロインだったはずが、内心ではかなり最初のほうから主人公にぞっこんだったことが知れて良かった。一番最後の短編はお互いがお互いのささやき声に悶える話で、あまりにも甘すぎて致命傷を負った。これがまだ付き合っていない2人の関係か。

さらにラノベを2冊読んだ。まず「VTuberなんだが配信切り忘れたら伝説になってた」3巻。2巻後書きに以下のようなことが書かれていて、ずいぶん楽しみにしていた。おそらくライブシーンのことだったのだろう。ギャグとシリアスの落差が激しすぎて感情が追いつかず、特に何も感じることはなかった。読後感が良いという曖昧な理由でおすすめラノベに入れたからか、3巻に対する期待が大きすぎて実際に読むとこんなものかとなってしまい、正直あまり楽しめなかった。僕が昨年末漁りまくっていたVtuberもののハーメルンと異なり、この作品には今のところ炎上というわかりやすい苦難、あるいはさらに広く言ってストーリーがない。その分主人公のキャラクター性だけが前面に出てきて、そのぶっ飛びぶりに付いていけなくなっているのかもしれない。

次巻にはweb版で屈指の人気を誇ったシーンが収録される

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

次に「青のアウトライン」。非常に良かった。絵の才能をテーマにした小説はいくつか読んだことがあって、どれも当たりだったので購入を決めたが、やはり大当たりだった。凡人である主人公と天才である幼馴染という設定は実は別の作品と被っているものの、こういう設定の話はいくらあってもよい。この作品でも主人公の良質な苦悩が描かれて感情的になれた。それでいて周囲の人物などはラノベらしく設定されており、全体通して軽い雰囲気がある。先に述べた、他の絵の才能をテーマにした小説を読んだときは、絵を競プロに読み替えたりしていろいろ考えこんでいたらしい。以下の引用記事にツイートへのリンクがある。今日はそんなことは全然考えなかった。天才キャラの描かれ方が違ったのか、あるいは1年以上経って自分の心境に変化があったか。仮にも赤に到達したので、才能という観点からは自信がついたのかもしれない。

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

週記(2020/11/23-2020/11/29) - kotatsugameの日記

布団に入ったのに寝るのに失敗したりしつつ、「放課後インスタントセックス」の溜めていた更新分を読んだ。章が1つ終わっていて、いろいろ山場もありハラハラした。最終章に入って少ししたところで更新が途切れている。しばらく休んだ後一気に完結まで投稿するつもりらしい。まだ微妙に不穏な要素があるので、どう解決されるのか楽しみである。

https://novel18.syosetu.com/n7640gf/

午前11時就寝。

01/21(金)

午後3時過ぎ起床。

今日は午後4時から1on1が予定されている。今週も進捗が何もなくて焦る。貰ったコードを少し読んで何とか耐えしのごうとしていた。始まってみると、今日はそのコードを書いた人もわざわざ時間を取って参加してくださるらしくびっくり。このような機会があるのに自分で何もしてこなかったのは辛い。しかし、まず一通りの説明をしてもらえたので、その後それを聞いて気になったことを質問していただけでもかなり得るものがあった。

2月頭に勉強会で発表する予定だったが、その近辺に期末課題の期限が集中してしまったのでずらしてもらえないかとお願いしたら、さらに次の週にしてもらえた。そういう調整も済ませ、ちょっと伸びて午後5時半に1on1が終了。話していただけなのに何故か達成感を得てそのまま布団に舞い戻ったところ、午後6時くらいに寝落ちした。

午前0時半に目を覚まし、布団の中でひたすらハーメルンを読み続けていた。

syosetu.org

「SAOを真面目に攻略しない人々」。1つの作品ではあるが章ごとに登場人物が独立しており、それぞれ異なったアプローチでSAO事件を解決するというもの。かなり面白かった。個人的には第3章が好きで、匿名凄腕ゲームクリエイター、しかしその正体は年端も行かぬ少年2人組……という設定に撃ち抜かれた。多分正体を隠している要素がツボに入ったのだろう。ただこれも4章に進むと何もなかったようにリセットされて新しい話が始まり、登場人物の名前だけは微妙に共通しているのが喪失感を感じさせて辛かった。

https://syosetu.org/novel/207052/

「東北家のただれた日常」。ボイロ二次創作のR18。ハーメルンはR18だとリンクを埋め込んでもタイトルが表示されないようだ。竿役がクズすぎて読み物としては受け入れがたい。読み物としては。

syosetu.org

魔法少女サクリファイス【完結】」。これを含めた以下3つはどれも同作者のもので、その他以前に「格ゲー全一Vtuber【完結】」を読んだことがあった。どれも短くまとまっていて良いという印象を得た。この作品に関しては、途中までは勘違いものだと考えていて、実際その要素もあるが、主人公の死亡までが超スピードで描かれて勘違いしている場合ではなくなった。

syosetu.org

「The Boss in Ikebukuro」。デュラララの二次創作。池袋ウエストゲートパークがめちゃくちゃ好きなのだからデュラララも読むべきなのかもしれない。中学生の頃友人から借りて4巻まで読んだ、その事実は覚えているが、内容はすっかり忘れ去っている。それでも、この二次創作は一発ネタということであまり原作の流れを必要としていないためか読みやすかった。

syosetu.org

「気に食わないお隣さん」。なかなか好みの設定。配信者だとか、気安く言い争える友人関係にある男女といった設定も好み。

atcoder.jp

TLにlong doubleでないと通らなかったというツイートと共に「eject」への提出が流れてきた。上に貼った提出はそれとは異なるが、問題のわかりやすさのためこちらを掲示しておく。long doubleなんて特殊な浮動小数点数を使わないと通らない問題はそうそうないだろうと思っているので、別のところに原因があるんじゃないかとコードを読み、理解した。pow関数の第2引数に1018にもなる大きな数を入れることになるが、第1引数をdoubleにしていると第2引数もそれに合わせられて、結果精度が落ち値が変わってしまったらしい。今回は-1をべき乗する場合があるため、指数の偶奇まで正確に見る必要がある。その点long doubleだと1018でもなんとか保持できるということのようだ。

ラノベを1冊読了。「純白令嬢の諜報員」。ファルまろさんのイラストとか、設定を網羅した創作世界に降り立って無双するという設定に惹かれて購入した。話は面白かった。1巻は虐げられていた少女が侯爵になるまでを駆け抜ける部分なので、辛い描写も多かったのだが、のちに全て覆されるとわかっていれば耐えられる。実際すべて上手く行って、今のところの困難はすべて解決したように思う。ただ1点、どうしても受け入れられない文章があった。76ページ。

「三分の三は一ですか?」

「0.9999999999……限りなく一に近い一ではないものですね」

数学的に間違っていることを主人公の能力を示すやり取りの一部として書かれ、醒めてしまった。

https://ncode.syosetu.com/n2558ez/

またネット小説、今度はなろうを読んだ。「一人っ子男児の俺が四つ子姉妹の一人になったわけ」。名家に生まれる四つ子の一人に転生、という設定はかなり良さそうだったが、展開はあまり好みではなかった。他の3人や周囲のキャラクターに振り回されがちなのがちょっと気に食わなかった。エタっている。

さらに少しハーメルンを読み進め、午後1時就寝。

01/22(土)

午後5時、弁当を受け取るために少し起きてまた寝た。午後8時半起床。シャワーを浴び、食事して、すぐARC133の時間になった。

AtCoder Regular Contest 133 - AtCoder

Aは丁寧に考えると広義単調増加が途切れる直前の要素を消せばよいとわかる。実装は微妙に注意が必要なのでC++で行った……ところ、言語選択をミスってRubyで出し1RE。直前までRubyで書こうと思っていたせいか。その後Bに進まず5分ほどRubyで縮めていた。Bは実家dpを考えると遷移がO(N\log N)個しかないので間に合う。Cは左上(H-1)\times(W-1)マスにK-1を埋め、残りで調整したところ、サンプル1から合わない。どうやら埋めたK-1を一番下の行と一番右の列に分離することで、右下マスの変化によっては総和が増えることもあるようだ。右下マスがどれだけ増えるかを\bmod Kで全探索し、それに合うように限界まで分離させる(一番下の行・一番右の列が受け入れられる値の和を求めて、\bmod Kが一致する最大値を取る)コードを書いたら通った。Dは累積XORが\bmod 4で分類できるので、左右それぞれ固定。すると\lfloor l/4\rfloor\lfloor r/4\rfloorが取りうる範囲、またそのXORがどうなればよいかという条件が得られるので、毎回桁DPした。

残り70分でEに進むも、こちらは全く手が出ずコンテスト終了。速めの4完で15位だった。

コードゴルフをする。AはAWKが短くなった。特に要素の削除はgsubを使うのが効く。数値の途中を削除することがないよう、パターンの左右には「単語の境界」を示すアンカーを付けておきたい。Perlでは\bだが、AWKでは\yらしい。ということで、文字列連結として"\y"を隣接させてみたが、動かない。エスケープシーケンスが無視されたというメッセージが出力されている。しばらく考えて気づいた。どうやら、文字列としてのエスケープと正規表現としてのエスケープが2段階に渡って解釈されているらしい。文字列としては\yは無意味なので、\が無視されている。ここで"\\y"とすれば文字列解釈後にちょうど\yとなり、正規表現としてエスケープシーケンスが解釈されることになる。

BはLISになるらしい。確かに。Cは全体にK-1を埋めてから適切に引き算することを考えると最大値ではなく最小値を求める問題になるようだ。行ごとに見たときと列ごとに見たとき、引くべき値の和が大きいほうが答えとなる。それで構築可能なのはまあなんとなくわかることで、コンテスト中の自分も証明せず使っている。上で述べた「限界まで分離させる」というところがそれだ。

午後11時半からCF #767 div.1に出た。

Dashboard - Codeforces Round #767 (Div. 1) - Codeforces

Aは貪欲。達成可能なMEXは毎回愚直に検索してもインクリメントの回数がnで抑えられる。あとはそれを達成できる最短のprefixを取ればよく、どうとでもなる。Bが鬼門だった。いつかのICPCで見た、両端から構築してまだ回文になっていない部分を持つ最短経路問題が頭から離れず、4WAと70分を費やした。実は回文が作れるなら高々2つ文字列を使えば十分だとわかる。残り時間があまりない中順位表を確認し、目に入った現在順位に絶望しつつ、より解かれていたD1に移った。nmをキーにしたdpを考え、遷移を整理すると、maxやminが登場しない形になる。D2は今のO(nm)O(n)にせよという問題らしく、手でいくらか表を作ってOEISに投げると見つかった。都合よく1か所をO(n)で求める計算式もあるので、オフセットを丁寧に考えて実装、通した。

A193605 - OEIS

最後はCを考えていて、i+jの偶奇で別々に作るそれっぽい構築が見つかったものの時間切れ。ABdDで410位、2891→2736(-155)。これまでで最大の減少幅。ほとんどギャグみたいなBに振り回されて本当に腹が立った。writerのレートが低いため余計に嫌な気分になる。Cは似た問題設定が「天下一王国の歴史」という問題で既出で、その解法から上1段を適当に決めても必ず全マスを奇数回聞ける構築があるらしい。僕が最後に発見したパターンは、そこに至る道筋こそ異なるものの結果的には公式解説の2番目に相当するようだ。

C - 天下一王国の歴史

しばらく日記を書いた後布団に移動し、ラノベを1冊読了。「デート・ア・ライブ アナザールート」。公式アンソロジー。特に「六喰トゥルールート」が良かった。六喰が逆行転移する話で、そういうネット小説を漁っていた自分にどストライク。公式アンソロジーとはつまるところ、職業作家による公式二次創作なのだと体感した。精霊攻略の部分はすっ飛ばし気味であるとはいえ、100ページ程度で本編をまるっと追体験した後、逆行そのものに向き合って綺麗なオチがついているのはすごい。六喰はほぼ最後に登場した精霊ということもあって露出が少なかったが、他の精霊に負けない良さがあるのだと感じた。そういう感情を抱えたまま読み進めると、次の短編は橘公司さん本人によるもので、こちらは完全なギャグ時空で落差にびっくりした。ギャグとしての面白さはピカ一だったので、さすがは作者本人ということか。

さらに2時間ほどハーメルンを読んで午後2時就寝。

01/23(日)

午後8時半起床。今日もシャワーを浴びて食事し、すぐABC236の時間。全完9位。

AtCoder Beginner Contest 236 - AtCoder

Aは短い書き方がわからないのでC++。BはRubyで、tallyを使って集計した。Cは尺取りっぽく書いた。Bからの流れでRubyで書いたが、特に書きやすいわけではない。以降はC++。Dは丁寧に列挙するとO( (2N-1)!!)になる。AOJ-ICPCのどこかの問題で見た覚えのある考察。Eは二分探索を2回やるだけ。Fは難しい。しばらくbitDPを考え続けた後、貪欲でよいことに気づいた。基底として読み替えると、取らなかった要素があるならそれの代わりになる要素が存在し、そのうちのどれか1つと交換しても変わらず基底になることから言える。Gはしばらく並列二分探索を考えていた。bitset高速化も含めてO(N^4/w\log T\log L)になって、さすがに間に合わないように見える(実は間に合うらしい)。ふと、ダブリングで使用した辺が追加される時刻のうち最も遅いものを持てばよいことに気づいた。

Exはかなりすんなり解けた。どうせ包除原理だろうと思って、一致する値のインデックス集合で遷移するO(3^N)のbitDPを書いた。しかしサンプル2が合わない。手で列挙してよくよく眺めたところ、包除原理で引かれすぎているらしい。2要素が同一になる場合として3パターン引かれているが、これらは全て3要素が一致しているから、3要素が同一になる場合を使って重複を省く。どうやらこの係数を+1から変えるべきであるようで、例えば今回なら、3要素が同一になる場合は2要素が同一になる場合を3回含むから、そのうち1回を除いて係数は+2となる。同様に4要素が同一になる場合は3要素が同一になる場合を4回含むため、係数は-(2\times(4-1))=-6となる。ここまでくれば規則性が見えてきて、どうやらnに対しては(-1)^{n-1}(n-1)!が係数になるらしい。これで出すとTLEが出て、毎回LCMを計算しているのが明らかにヤバかったのでそこを前計算したら通った。

コードゴルフ。Aは苦労してVimで書いていたら魔法のように縮められた。最終行でGコマンドを空打ちし、<Ctrl-o>で戻ってこれるようにするのは何となく見覚えがある気がする。とはいえ自力では思いつけない。Bはなんと全部の数のXORが答えになるらしい。まったく気づかなかった。総和を2N(N+1)から引いても求まる、ということにも気づけていない。完敗。CはRaku。TLEすると思っていたが思ったより高速に動作した。EはRubyのbsearch。Fはnoshi基底を使わず、現在生成可能な値をすべて保持すると結構縮んだ。D、G、Exは手つかず。

午後11時半からCodeChef Jan Cook-Offに出た。

https://www.codechef.com/COOK137A

MERGEDLISはそれぞれのLISの長さを求め、足したものが答え。SEGDIVはよくわからない。先頭から順に条件を満たせる値を探索して置いていったら1000未満で構築できてしまい、半信半疑で埋め込んで出したら通った。PRIMEGRAPHは、pN-1以下の最大の素数としたときNp/2が達成可能な最大値で、この値が整数ならば対称性からうまく配置できそうなので良い。そうでない場合は特にN5以上の奇数になって、どうしても次数が2の頂点を作る必要が出てくるため、それを1つだけ用いる(N-1)p/2+1が答えになる。

ERASEは先頭から累積minの更新点を列挙して、隣接するどの2つの更新点にも、その2つとそれぞれペアを組めるほかの1点が存在すればよい。と面倒なことを言っているが、つまり2次元平面にプロットしたときに左上と右下に完全に分割できなければよいというだけの話。日記を書きながら証明を思いついた。操作可能なペアに辺を張ってグラフを作ると、これが連結であれば全域木を取って葉から操作することで達成可能。連結でないというのは、つまり左上と右下に完全に分割できる場合である。

BTは頑張った。訪れるアトラクションを選ぶと、それらによって分割されたK+1個の区間を通る回数は順に0,2,\dots,K-2,K-1,K-2,\dots,2,0となる。どの区間もこれより多い回数通ることはできない。左半分だけを考えると、各区間は本来K回通るはずだったのに、あるアトラクションを訪れるとそれより左を通る回数が2回ずつ減らされる、という風に読み替えられる。アトラクションの退屈さも含めて優先度付きキューで管理し、退屈さの減少が小さいほうからK/2個を選ぶことになる。特に、各iに対し、アトラクションiを必ず左からK/2個目に選ぶ場合の退屈さを求めておく。右半分も同様の前計算をする。あとは真ん中のK-1回通る区間を管理しつつ答えを求めることになって、累積maxだのを適切に管理すればセグ木も要らず線形時間で求まる。

BPERMは難しい。1\dots X-1は無視してよい。まずXを置き、その後N\dots X+1を順に配置していくO(NK)の挿入dpを考える。手でいくらかdpテーブルを埋めてOEISに投げるとヒットする。これまたオフセットは慎重に管理せねばならないが、ともかく第一種スターリング数(の絶対値)を計算できればよさそう。検索すると母関数がx(x+1)(x+2)\dots(x+n-1)になるようで、こういう短い多項式がたくさん集まった積は丁寧に畳み込みの順序を管理すれば丸ごと求められることを思い出す。丁寧にとは言っても、実際はセグメント木に乗せれば自動で上手くいく。最初にセグメント木を105まで構築するコードが十分高速に動作したので投げ、AC。

A125553 - OEIS

UNRUPDは面倒。更新は、最下位bitを落とすか、最下位bitから下のbitを全部埋めるかの2つ。後者は連続で行っても特に影響がない。よって、「最下位bitから順にx個落とす→下のbitを全部埋める」で組にしてxvectorで管理し、これを作用素とした遅延セグメント木を考えることにした。xとしては狭義単調増加なものさえ考えればよく、またx\ge 30だとA0になってしまうので、vectorのサイズは高々30となり、間に合いそうだ(実際には実装し忘れた)。マージは頑張る。作用は普通にやると時間がかかってしょうがなさそうだったので、かなり頑張ってAのbitの走査を全体で1回しか行わないようなコードを書いた。3.8secで通り、先ほど実装し忘れたと言ったxのサイズに関する場合分けを書き足すと3.5secになった。TLは4secなのでかなりギリギリ。

調子が良かったのかABCに続き全完、10位で2518→2614(+96)。highestである。

3時間ほどハーメルンを読んでいると朝になってしまったので、日記を書いた。昨日からウマ娘プリティーダービーの二次創作を読んでいる。ゲームもしないし逆張りウマ娘自体に興味がないフリをしていたので、誰が誰かよくわからないが、それでも読ませる文章である。

syosetu.org