読書記録(2021)

kotatsugame.hatenablog.com

kotatsugame.hatenablog.com

1月

  • 1日
    涼宮ハルヒの直観
  • 2日
    セプテムレックス
  • 3日
    いわくつき魔族教師と天使候補生
  • 4日
    人生∞周目の精霊使い
  • 5日
    クラスの大嫌いな女子と結婚することになった。
    僕はリア充絶対爆発させるマン
  • 6日
    僕はリア充絶対爆発させるマン2,3
  • 8日
    見習い巫女と不良神主が、世界を救うとか救わないとか。
  • 9日
    デスゲームから始めるMMOスローライフ
  • 10日
    デスゲームから始めるMMOスローライフ2
  • 11日
    デスゲームから始めるMMOスローライフ3
  • 20日
    デスゲームから始めるMMOスローライフ4
    江戸の花魁と入れ替わったので、花街の頂点を目指してみる
  • 30日
    転生魔王の大誤算2

2月

  • 5日
    あくまでも探偵は
  • 11日
    幼馴染で婚約者なふたりが恋人を目指す話1
    日常ではさえないただのおっさん、本当は地上最強の戦神7
    継母の連れ子が元カノだった6
  • 16日
    暇人、魔王の姿で異世界へ12
  • 17日
    シェアハウスで再会した元カノが迫ってくる
  • 19日
    数学者の夏
  • 20日
    ホラー女優が天才子役に転生しました2
    義妹生活
  • 21日
    裏社会最強の男、終末異世界を愉しむ。
  • 23日
    ワールド・ティーチャー14
  • 24日
    盤上の向日葵 上
  • 25日
    盤上の向日葵 下
  • 28日
    魔王2099

3月

  • 10日
    自称Fランクのお兄さまがゲームで評価される学園の頂点に君臨するそうですよ?10
  • 12日
    りゅうおうのおしごと!14
  • 13日
    ねえ、もっかい寝よ?2
  • 23日
    最強魔法師の隠遁計画12
  • 24日
    現代社会で乙女ゲームの悪役令嬢をするのはちょっと大変2
    お隣の天使様にいつの間にか駄目人間にされていた件4
  • 25日
    公女殿下の家庭教師8
    暗殺者である俺のステータスが勇者よりも明らかに強いのだが4
  • 26日
    転校先の清楚可憐な美少女が、昔男子と思って一緒に遊んだ幼馴染だった件
    幼馴染の妹の家庭教師をはじめたら3
  • 27日
    ブラックな騎士団の奴隷がホワイトな冒険者ギルドに引き抜かれてSランクになりました3
  • 30日
    文字渦
    時々ボソッとロシア語でデレる隣のアーリャさん
  • 31日
    僕が答える君の謎解き

4月

5月

  • 2日
    D級冒険者の俺、なぜか勇者パーティーに勧誘されたあげく、王女につきまとわれてる2
    やはり俺の青春ラブコメはまちがっている。14.5
  • 3日
    ルミナス☆アイドル
  • 10日
    元スパイ、家政夫に転職する2
  • 12日
    魔王2099 2
  • 13日
    隣のクーデレラを甘やかしたら、ウチの合鍵を渡すことになった2
  • 14日
    辺境都市の育成者3
    両親の借金を肩代わりしてもらう条件は日本一可愛い女子高生と一緒に暮らすことでした。2
  • 15日
    株では勝てる俺も、カワイイ女子高生には勝てない。
  • 18日
    恋は双子で割り切れない
  • 19日
    雪中の花は、軍神を偽る
    才女のお世話1
    クラスの大嫌いな女子と結婚することになった。2
  • 22日
    午後九時、ベランダ越しの女神先輩は僕だけのもの2
  • 23日
    犯罪社会学者・椥辻霖雨の憂鬱
    レーゼンシア帝国繁栄紀
  • 24日
    レーゼンシア帝国繁栄紀2

6月

  • 25日
    ネトゲの嫁が人気アイドルだった1
    異世界でチート能力を手にした俺は、現実世界をも無双する8
  • 27日
    クラスに銃は似合わない。
    VTuberなんだが配信切り忘れたら伝説になってた

7月

  • 1日
    私立シードゥス学院II
  • 2日
    史上最強オークさんの楽しい種付けハーレムづくり5
  • 3日
    転生魔王の大誤算3
  • 6日
    居候先の三姉妹がえっちなトレーニングを求めてくる
  • 16日
    お隣の天使様にいつの間にか駄目人間にされていた件5
  • 17日
    幼馴染で婚約者なふたりが恋人をめざす話2
  • 23日
    サベージファングお嬢様
    ブラックな騎士団の奴隷がホワイトな冒険者ギルドに引き抜かれてSランクになりました4
  • 28日
    公女殿下の家庭教師9
    嘘と詐欺と異能学園
    推しが俺を好きかもしれない
  • 29日
    きみは本当に僕の天使なのか
    日本語が話せないロシア人美少女転入生が頼れるのは、多言語マスターの俺1人
  • 31日
    時々ボソッとロシア語でデレる隣のアーリャさん2

8月

  • 2日
    グッバイ現実世界
  • 3日
    大罪ダンジョン教習所の反面教師
  • 7日
    最強魔法師の隠遁計画13
  • 8日
    継母の連れ子が元カノだった7
  • 9日
    サイレント・ウィッチ
  • 10日
    幼女戦記8
  • 11日
    異世界管理人・久藤幸太郎
  • 12日
    異世界管理人・久藤幸太郎2
  • 13日
    前世は剣帝。今生クズ王子1
    鳩子さんとラブコメ
  • 14日
    鳩子さんとラブコメ2
  • 17日
    鳩子さんとラブコメ3
  • 20日
    鳩子さんとラブコメ4
  • 23日
    世にも美しき数学者たちの日常
  • 25日
    英国カノジョは“らぶゆー”じゃなくてスキと言いたい
  • 31日
    かくりよの宿飯
    現代社会で乙女ゲームの悪役令嬢をするのはちょっと大変3

9月

10月

  • 2日
    VTuberなんだが配信切り忘れたら伝説になってた2
  • 19日
    探偵は教室にいない
  • 20日
    りゅうおうのおしごと!15
  • 21日
    異世界でチート能力を手にした俺は、現実世界をも無双する9
  • 22日
    クールな月城さんは俺にだけデレ可愛い
  • 29日
    ワールド・ティーチャー15

11月

  • 3日
    隣のクーデレラを甘やかしたら、ウチの合鍵を渡すことになった3
    英雄と魔女の転生ラブコメ
    家事万能の俺が孤高(?)の美少女を朝から夜までお世話することになった話
  • 5日
    最凶の魔王に鍛えられた勇者、異世界帰還者たちの学園で無双する1
  • 7日
    前世は剣帝。今生クズ王子2
  • 9日
    迷探偵の条件1
  • 11日
    護衛のメソッド
  • 21日
    恋人全員を幸せにする話
  • 22日
    信長転生
    ブラックな騎士団の奴隷がホワイトな冒険者ギルドに引き抜かれてSランクになりました5
  • 24日
    公女殿下の家庭教師10
    サベージファングお嬢様2
  • 25日
    ネトゲの嫁が人気アイドルだった2
    神様の罠
  • 26日
    僕らのセカイはフィクションで
  • 30日
    ログアウトしたのはVRMMOじゃなく本物の異世界でした

12月

  • 5日
    天才最弱魔物使いは帰還したい2
  • 6日
    王立魔術学院の《魔王》教官I
  • 7日
    何と言われようとも、僕はただの宮廷司書です。
  • 8日
    時々ボソッとロシア語でデレる隣のアーリャさん3
  • 9日
    ひきこもりの俺がかわいいギルドマスターに世話を焼かれまくったって別にいいだろう?1
    灰原くんの強くて青春ニューゲーム1
  • 11日
    江戸の花魁と入れ替わったので、花街の頂点を目指してみる 二
  • 17日
    西野 ~学内カースト最下位にして異能世界最強の少年~8
  • 24日
    美少女とぶらり旅
  • 25日
    才女のお世話2
  • 29日
    公務員、中田忍の悪徳
    日本語が話せないロシア人美少女転入生が頼れるのは、多言語マスターの俺1人2
  • 30日
    お姉ちゃんといっしょに異世界を支配して幸せな家庭を築きましょ?
    お見合いしたくなかったので、無理難題な条件をつけたら同級生が来た件について3

週記(2020/12/21-2020/12/27)

12/21(月)

午後4時に寝て、午後7時に起きた。目覚ましで意識を取り戻したはいいものの、そのままでは二度寝してしまっていただろう。ただ眠気を吹き飛ばすようなことがあって、無事起床に成功した。

今日提出のレポートが1つ残った状態で寝たのだった。この期限は今日の日付が変わるまでである、ということは確認していたのだが、教員が何を考えたか「採点を終了しました」と講評を出していた。

「提出していない人も多く」←期限より先に締め切っているのだから当たり前である。さすがに指摘したら修正されるはずなので、一応コメントを送っておいて、当初の予定通りサークルの解説会が終わった後にレポートを書くことにした。

サークルのABC185解説会は、ホスフィンがF問題を担当してくれるとのことなので、残り時間でEから遡ってスライドが作れた分だけ発表することにした。結構時間を食うので、結局DとEしか発表できなかった。

ABC186のゆっくり実況が2000回再生を突破していてかなりうれしい。

レポートを書く。練習問題を解くが、そのすぐ上でやっている証明を真似したら簡単に解けた、と思う。自分では正しいことを書いているつもり。送ったコメントには返信がないが、かまわず提出した。

AOJのレーティングが更新されていた。一週間で250くらい上げた週もあってすごい。現在は1265.08。

日付が変わって、教員からコメントが返ってきた。

受け付けてくれるようだが、講評にヒントを書いてしまったので公平になるよう何かの処置があるらしい。僕は「ヒントが出された後に提出して」「ヒントを一切見ずに解いた」のでかなり辛い。こんなだったら思いっきりヒント見て解いたんだが……。

ラノベのプロ!」を読んだ。ストイックなラノベ作家が主人公。描かれる主人公のラノベ書きに対する取り組み姿勢は僕の理想的な競プロへの取り組み方に似ているものがあると感じて面白かった。ゲームを一切しないとか、健康に気を使っているとか。僕は今あまり健康に気を使えていない。

月曜日公開のyukicoder アドベントカレンダーコンテストの問題は、負辺ありの最小費用流だった。これまで毎回ベルマンフォードに書き換えていたのだが、ここらで一念発起してライブラリに負辺ありの場合を組み込むことにした。結局ポテンシャル計算だけ最初にベルマンフォードで行えばよいので、add_edgeごとに負辺かどうか判定して、min_cost_flow呼び出し時に負の辺が存在したらベルマンフォードを行う。負閉路があるとassertで落ちる。min_cost_flowを複数回呼び出すことは想定していない。

午前5時くらいに就寝。睡眠時間を短くすると生活リズムも正されるのかもしれない。

12/22(火)

正午前に目を覚まして、Game of Vampireを読み返していた。午後1時半くらいになって、学食が閉まりかけていることを認識して向かう。

今日はそこそこ早起きだし市街地に出かけようか、と思っていたのだが、購買で買ったお茶などを家に置きに帰ったところ、眠すぎて布団に倒れこんでしまった。そのまま2時間弱の睡眠を3回程度繰り返し、午後8時になってしまう。睡眠時間を短くすると生活リズムが正されるというのは真っ赤なウソで、実際は一日中眠くてどうしようもなくなるだけ。

午後9時からのサークルのバチャに参加する。今日はこどふぉ#543。

A問題から難しい。途中順位表を見ていたが、ACしている人数も少なめなので、自分がドハマりしているわけではなさそう。そのまま44分+2WAかけて通し、B問題に進む。アナウンスでBよりCDのほうが簡単だといわれていたようなのだが、見ていなかった。Bは結構素早くわかって証明もできていたはずが、実装ができていなかったためこれも2WA。

CはZalgoやるだけ、Dは木DPを頑張るだけ。確かにB問題よりも簡単といわれても納得。結局4完で、現在の順位表(リアルタイムの人と僕より先にバチャをやっていた人)では19位になった。

アナウンスを読むと、この回がかの有名な「unethical and ugly behavior」の回だということがわかる。19位という数字には、unratedだったのもあって人が少なかったことも影響しているのかな。

そのあとはまたGame of Vampireを読み返していた。午前3時くらいに寝落ちした。

12/23(水)

午前9時、目を覚ます。またYouTube流しっぱなしデスクライト点けっぱなしエアコン付けっぱなし部屋の電気点けっぱなしで寝ていた。

第32回TechFULコーディングバトルの解説が公開されていた。昨日の深夜から言及が可能だったようだ。僕もここで言及しておこう。

3問目からいきなり難しい。負の数の四捨五入がどういうものかよくわからないが、ググる0.5足して切り捨てればよいらしい。誤差が怖いので全体を10^4倍して整数で持っていたのだが、負の数を切り捨てるのに失敗していた。これに気付かず2WA出して、最終的にはdoubleで持ってsetprecision(3)をしてしまった。そのあと負の数を切り捨てるのを直したコードでも通った。丸め方向の関係でsetprecisionと自前の計算で異なる場合があると思っていたが、ないことが証明できるか、テストケースにそのようなケースが存在しないだけか……。

8問目は最初TLEしてしまった。自分がうっかりヤバい探索を書いていたのか、それとも向こうの環境が僕のlog2つに耐えられなかったのか。冷静になるとlogは1つでできるので、それを書いたら通った。

10問目もTLEしてしまった。うっかりNTTに帰着してしまったが、もっと冷静になると個数無制限ナップザックみたいな更新をすることで線形時間で更新できる。そんなところに重めのlogを置くと落ちるのは当たり前なんだよなあ。ただ、手元では最大ケースでも3秒ちょっとしかかかっていないはずなのにTL 5秒でTLEしてるのはさすがに環境が貧弱すぎるのでは。

総合では5位だった。また1000円ゲットした。なんかTechFULのシステムがひたすら苦手らしく、微妙な順位しか取れない。といってもまだ2回しか参加していないからたまたま下振れしているだけかもしれない。

昨日は学食に徒歩で行ったら思いのほか時間がかかって学食が閉まりかけたので、今日は少し余裕をもって出発する。食事して帰宅、少しパソコンを触ってから今日こそ市街地に行こうとすると、電話がかかってきていたことに気づいた。折り返し電話をかけても通じなかったが、そのあとすぐさらに折り返してきてくださって、やっと会話できた。

リクルートの人事の方だった。インターン面接の結果発表。僕は一応合格ではあるらしいが、僕の適正を考え合わせると案内できる仕事がないので、冬のインターンには参加できないらしい。謎。

どうやら不合格をオブラートに包んでいるだけということはなさそうだし、インターンの面接に合格できただけで十分うれしい。つまり、自分の現在の能力や将来的なポテンシャルが評価され得るものであるということなのだから。インターンの面接に合格したという実績だけ得て実際の労働を回避した点でアドである、という指摘もあった。

実際どういう扱いがされるのか、またの機会に応募するとしたらどんなスキップができるのか(あるいはできないのか)は、何もわからないが、年明けに人事の方がまた面談をセッティングしてくださったので、そこで明らかになるだろう。

市街地に出る。まずはメロンブックスに行ってラノベの新刊を買う。「公女殿下の家庭教師7」と「辺境都市の育成者2」の連動購入特典を楽しみにしていたのだが、売り切れていた。12/19の発売日に行かなければならなかったのか、残念。他にも数店舗回って、チェックしてあった新刊で今日までに刊行されたものをすべて買い集めた。

ゲーセンにも行く。特に成果なし。午後9時からSRMがあるので、午後7時半くらいに切り上げる。ラーメンを食べて帰ろうと思い立つ。ラーメンパンチという店があって、移転したのだが、跡地もラーメン屋になったことをTwitterで見聞きした。そこへ行ってみたが、たまたま水曜日が定休日らしく閉まっていた。仕方なく一閃閣へ。無難。

今日買った本たち。

ふぁぼん氏と「このごろ毎月隣人のクール美少女と半同棲する本が出ている」との共通見解を得る。僕のラノベ遍歴においてはまず「お隣の天使様にいつの間にか駄目人間にされていた件」が出現したので、これがヒットしたことによる影響だと考えている。

SRM796に出る。EasyとMedを通して24位、2306→2328(+22)。

Easyは読解。読んでやるだけ。何がしたいのか意味不明。

Medも読解。重要な制約が2点、「ヘビは壁際にいない」「ヘビの頭は現在の胴体を跨がず空きマスのうち半分より多くに移動できる」とあった。前者はわかりやすく、想定では壁際を一周することがわかる。後者がよくわからなかった。

よく考えると、壁際のマスは8x8の盤面では28マスあるので、後者の制約を満たすためにはヘビの頭は胴体を跨がずに壁際のマスまで移動できなければならない。つまり、胴体の移動をシミュレートしなくても頭は壁際まで移動できるという話。

僕は胴体の移動もシミュレートして行動を幅優先探索し、13ステップで打ち切ったが、通った。あんまりよく考えていないが、ヘビの長さが最大の26だった場合は13ステップ以上移動すると全体で80回の移動回数制限に引っかかってしまうということから設定した。ヘビの長さがもっと短い場合を何も考えていない。

一年を振り返るブログ記事の構想を練っていた。読んだ本・なろうから何らかのランキングを作ることを考えていたが、一気読みして作中世界にどっぷり浸かるなろうに対して、新刊が出るたびに少しずつ読み進めるラノベは印象に残りにくいことに気づいた。もちろんシリーズ一気読みとかもあるんだけど、なろうと比較すればほとんど行わない。

午前3時くらいに就寝。

12/24(木)

いつから起きていたか記憶がないが、起床報告をする前から布団でゴロゴロしつつ二度寝しようとしていたはず。結局二度寝できずに午後3時に身を起こす。

学食の夜の部が始まるのを待って行く。午後5時くらい。店員さんは結構な人数がいるけど、客は全然いない。10人強くらいか。採算が合っていなさそうでつらい気持ちになる。ただ、帰宅途中にグラウンドの横を通ったら、部活をしている人が結構いたから、遅い時間になれば客の入りはそこそこ増えるのかもしれない。

午後7時からXmas Contest 2020に出る。最初に全体をざっと眺めていたが、今年はコードが極端に短くなるような問題はなさそう。真面目に取り組むことにして、最初にDの実験を繰り返していた。Nを固定してCをいろいろ変えながら出力を見ていたが、特に特徴的なことはなさそう。OEISに投げても反応なし。余因子展開して帰納的にできないか考えていたが、どうにもうまくいかなかった。

あきらめて順位表を見たところ、CのACが出ていたので、これを考えることにする。ナイーブにGrundy数を求めて出力してみたところ、0102101021021...というような出力が続く。0102101021021で構成されているように見えるが、このどちらが出現するかはわからない。そこで、それぞれ0102101010210212と置き換えて出力してみることにした。今度は12122...となったので、さらに1211222と置き換えて出力してみる。

今度も12122...になったところで何となく予想がつく。おそらく再帰的な構造になっているのだろう。証明はしないことにする。そこで、それぞれのパーツの長さを下から順に求め、Grundy数を求めるときは上からどのブロックに位置するか求めていくコードを書いた。ナイーブな出力と突き合わせると一致したので、提出してみたところ、通った。

そのあと、H問題に挑んだ。制限時間が6secだったので、定数倍高速化だと考える。subsetに渡る和を取るのが非常につらいが、__int128を使って余りを取る回数を減らすと、手元で8sec弱になった。subsetのループを何とかする。具体的には、下6桁を64通り場合分けして、それぞれでループの内容を埋め込むコードを生成した。これはいったん和をlongに溜めたあと__int128に加算することができるのが効いて6.3secくらいになった。しかしどうやら手元よりAtCoderで動かしたほうが微妙に遅いらしい。まあそれがなくてもTLEなのだが、後から確認したところN=21のケースでは常にTLE打ち切りの6.6secになってしまっていて残念。

結局解けなかったので解説を読んだが、よくわからなかった。そもそもsubset convolution未履修。

ラノベのプロ!」2巻を読んだ。ラノベの流行り廃りや打ち切りの方針に関する話が出ていて興味深い。こういうのは出版された直後に呼んだほうが当時のラノベシーンの空気感と照らし合わせてよかったな、と思う。打ち切りに関して、「昔はどのレーベルも2巻や3巻までは出して様子を見ていた」という発言がされていた。確かに、実感として2巻や3巻で終わるシリーズは非常に多い。どこかのあとがきで「3巻がシリーズ存続の山場」と書かれていたのを覚えている。しかし今はそうではなく、もっと早い段階で打ち切りの決定がなされるようだ。ところで、打ち切りの話をしている巻でこのシリーズ自体も打ち切られているのが皮肉的。

もう1冊読む。「両親の借金を肩代わりしてもらう条件は日本一可愛い女子高生と一緒に暮らすことでした。」という題名。題名・あらすじ・イラストに惹かれて買った。「ラノベのプロ!」によれば、これはラノベのパッケージングが僕に刺さったということ。ただ文章がどうにも合わなかった。外側だけ見て買っているのでそういうことはある。主人公の発言がほとんど地の文になっているのがなんとも読みにくい。

デレマス㊙情報というTwitterアカウントが今年も企画をやっていたので、一連のツイートを読む。去年も読んだなと懐かしい気分になる。毎年面白い。

Tamer's Mythology書籍版の続刊が決定したらしい。非常にうれしい。次は第2部ということか。あと一押し、3巻まで出てくれればフィルが王都に帰るのを読めるかもしれない。

金曜日は2限の時間帯に小テストがあるらしいので、起きる必要がある。布団でなろうを読んでいたら午前6時になってしまったので、午前10時半に起きることを強く念じつつ就寝。

12/25(金)

10時の目覚ましでは起きれなかった。10時半の目覚ましで起床。よく考えると、小テストの開始時に起きるのはまずい。慌てて顔を洗い、ブラックサンダーをかじりつつ投稿された小テストを確認する。

45分間より少し短い時間、頑張って解いたつもりだが、半分しか解けなかった。シンプルに演習不足。あとここ3週間分の講義内容に目を通しておらず、後半の問題はそもそも理解ができなかった。せっかくなので講義スライドを読んでから布団に戻り、午前1時ぐらいから二度寝した。

次に起きたら午後7時半だった。何らかの睡眠負債が溜まっていたのかもしれない。

ima.goo.ne.jp

話題になっていた記事を読んだ。創作物における天才のテンプレートみたいな感じですごいなあという気分になる。

高評価がついに100件に到達した。非常にうれしい。

こどふぉでICPCのミラーに出る。午後8時半からの5時間コンテスト。適度なところでやめるつもりだったのに意味不明なくらい好調で、結局5時間フルに参加してしまった。結果は全完で全体7位、個人としてはtouristに次ぐ2番手だった。戦略としては、1問解くたびに順位表を確認してその時点で最も解かれている問題を読む、というものを採用したのだが、1度も詰まらず毎回読んだものを通すことができた。以下、解いた順番に言及していく。

Eはやるだけ。最も簡単だった。Nもちょっと怖い見た目をしているが、やるだけ。Cもやるだけ。Fは平行で180度逆なベクトルのペアを数えればよい。Kは面倒なことを考えずに障害物の候補を全探索。判定を間違えて1WA。Dは貪欲だが、条件などの±1をミスって2WA。よくわからなくなって貪欲の順番を変えたりしていたが、大きいほうからと小さいほうから、どちらでもよい。

Jはクラスカルっぽくやるだけ。AはLISの先頭と間に大きな要素をはめ込む形になるので、はめ込める要素が存在するかをDSTで判定、LISは二分探索できないのでsegtree。セグ木は値とインデックスをペアにして区間maxだが、インデックスを反転しておかないとダメで、1WA。Iはよくわからないが、ベクトル2つを互除法みたいにして片方のx成分を0にしたあと、平行四辺形の内部の格子点を出力したら通った。

Mもよくわからない。値ごとにそれを含む集合のインデックスを持つことにして、それを調べる。ある集合を見るとき、それに含まれる値でループして、今見ている値を含むインデックスを舐め、以前に出現したかチェックする。ただしこれは最悪ケースでO(N^2)になるので、各集合について「それを含むインデックスの個数が最も大きな値」を調べるのだけ後回しにし、逆に「これまで出現したインデックスがそこにも出現するか」を調べることにしたら通った。いろいろ考えたけど最悪ケースもよくわからない。920msだったので、もしかしたらヤバいケースが入ってなかっただけかもしれない。3TLE。

Hは消す要素の小さいほうから(K-1)/2個目と大きな方から(K-1)/2個目の間に消さない要素が存在すればOK。Gは最初目との角度を持っていたが、どうも誤差が怖いので外積で判定することにした。目と並行な道を歩いている場合に注意。中途半端な場所から隠れる場合は正弦定理で求めたが、これと同じ処理を行うと0除算が発生する。Lは素数のべき乗をチェックしたいが制約が1e18なので、何とかする。具体的には、同じ素数のべき乗を2つ持ってきて、指数に関して互除法っぽいことをすると1e9以下にできる。それが終わったら気合いで場合分け。素数のべき乗を全部入れていいのか、それともちょっと減らさないとダメなのか、2個ペアしか作れないのにKが奇数の場合はどうするのか……など。最初の、指数に関する互除法っぽいところでミスしていて3WA。

最後1時間を残してB問題に突入した。solved数はいまだに一桁だった。K_iについて考える。まずsum=0とし、j日目はA_j-K_iを足す。sum<=0になったら、前回sum<=0になった日との差を計算してsum=0に戻す。最後まで終わったら、計算した日の差の最大値が答え。これをK全部について一気にできればよさそう。

足す値は狭義単調減少なので、sum<=0になるのは右端までの区間だとわかる。K_iはインデックスごとに不変なので、K_iの係数とA_jの和をもっておけば、全体にA_j-K_iを足すのは遅延セグメント木でできて、sum<=0となる区間の左端L_jも二分探索で求められる。このL_jを日ごとに記録しておく。sum=0に戻すのも、作用素にリセットのフラグを持たせればできる。

最後に、日の差を計算するフェーズが残った。K_{m+1}=infと考えると、このときは毎日売り切れるので、以降はL_jを降順に見て、隣り合う売り切れない区間をどんどんマージしていくとできる。マージするたびに最大値を更新すればよい。見えるのはすぐだったが手数が多くて実装に苦労した。サンプルは結構すぐに合ったので提出したが、ジャッジが詰まっていて10分くらい待たされた。終了10分前にジャッジが始まって、そのままAC。

今年度の新歓期間は12月の半ばまであったが、それが終了したので、サークルの名簿などに更新がある場合報告せよとのメールが来ていた。名簿を更新して提出した。

「辺境都市の育成者」2巻を読んだ。これ(というかこの作家の著作全部)は文章やセリフに非常に癖があって読みづらいが、設定は大好きなので喜んで読んでいる。「公女殿下の家庭教師」より読みづらかったと感じたが、なぜだろう。今のところは、「キャラが多くてほとんど『弟子』というポジションなので差がわかりづらい」からだと考えている。

午前7時半くらいに寝る準備を済ませて布団に入ったが、明日のAGCに向けた睡眠調整を考えるともう少し起きていたい。なろうを読みつつゴロゴロしていた。途中空腹に耐えかねて少し物を食べた。午前9時半、就寝。

12/26(土)

午後4時半くらいに少し目を覚まし、トイレしたりTwitterを見たりしていたが、もう少し寝ようと思って二度寝した。午後7時起床。シャワーを浴びてコンビニに行き、パン・おにぎり・お菓子を買ってくる。これは今日明日の食料になる。

bashで1000ACした。ここ一か月ずっとやっていた。

ついでにHeatmapもそこそこ埋まったようなのでツイート。All ACの欄はまだ少し薄緑が残っているので、これも消えたぐらいでもう一度ツイートするだろう。

3月から4月にかけては、言語アップデートに備えてOther Contestsの未ACを埋めていた。アップデート後は0msが出せなくなることが分かっていたため、今のうちに0ms出せるものは出しておこうという魂胆。ただし、Streakを意識しだすと切りがないため、わざわざ週に1回切っていた。逆に意識していないか?毎日新規で数十ACしている中で1日何もしないのは苦痛だったことを覚えている。でもうっかり続いてしまうよりはマシかな。

AGC050に出場した。結果はBCDの3完で72位、パフォーマンス2829でレートは2675→2691(+16)。

最初の1時間はずっとA問題を考えていたが、結局解けなかった。あきらめてBに行く。まず実験して規則を見ようと考える。添え字mod 3ごとに1の個数が等しければOKかと考えたが、反例が山ほど見つかる。ほかにも少し試したが、どうにもわからない。冷静になって制約のN<=500を見ると、これは区間DP。実際に区間DPできるので、できる。

Aに戻ろうかとも考えたが、今更通してもどうしようもないのでCに行く。すぬけ君が動くのを邪魔するようにブロックを置くのがよくて、すぬけ君は左にも右にもブロックがある状態になったらその中間地点にいるのがよい。ブロックを置くたびに区間の幅(すぬけ君が動けるマスの個数)-1がどう変化していくのかを見ると、BS...(k個)...SBS...(l個)...SBというターンのとき、min(l,k//2)になる。-1することによって'S'の個数と対応付けられ、式に±1が出なくてかなり綺麗。

結局、2べきごとに幅が0になるまでの手数が変わることがわかるので、0...20くらいまで持っておけばDPできる。累積和を同時に計算しておいて、それで一気に更新。'B'が出現する位置より左からは更新できない。最初に'B'が出現するときも別に処理しておく。

最初0...19で提出したらWAだったが、すぐに間違いに気づけて良かった。まあサンプル2つ目はそこそこ強そうだし、これで間違えるようならあとは制約に関することかmodを間違えているだけだと見当がつく。

Cを通したが、あまり順位がよくなかった。残り一時間、やはり今更Aが解けてもどうしようもないので、とりあえず30分くらいDを考えようとする。よくわからない制約。制約だけ見れば半分全列挙だが、この問題に対してはどうしようもなさそうなので、やたらめったらキーを持つDPだと睨む。遷移がループしそうに見えたので、連立方程式を解くタイプかと思ったが、ループはしない。具体的なDPのキーを考える。

対称性がそこそこあるので、今具体的に誰が残っているかは知らなくてよい。「今i人目を見ていて、j回目のターンで、残りの商品はk個で、すでに抜けた人はl人」くらいあればよさそう。ちょっと考えるとl==K-kが言えるので、キーは3つになる。この時、実際に商品を獲得できる確率はk/(K-j)となるので、確かに計算できている。(i,j,k)に対して、残っているN-(K-k)人それぞれの確率を計算する。つまりDP配列は4次元になる。コードを書きながら遷移を考える。

(i,j,k)から遷移するのは、(i+1,j,k-1)(i+1,j,k)。正確にはこれらを計算した後に貰ってきて合算する。ただしi+1==Nのときは人が一周するので、例えば(i+1,j,k)の代わりに(K-k,j+1,k)を呼び出すことになる。この時、残っているN-(K-k)人をK-k...N-1マッピングしている。今見ている人が商品を獲得できなかった場合はK-k...N-1それぞれを今のDP配列に足す。商品を獲得できた場合は、人数が1人少ないDP配列が戻ってくるので、自分の場所で分割してk/(K-j)を割り込ませる。

しばらくガチャガチャやっていた。サンプル1は比較的早い段階で合ったのでオッとなったが、サンプル2が合わない。いろいろ修正して、最後に割り込ませる処理の添え字が少し違ったのを直したら合った。サンプル3を試すと実行が終わらなくて顔面真っ青になるが、よく見るとメモ化できていなかった。そこを修正したらなんとサンプル3も合って、提出したら爆速で通った。これで64位まで浮上した。残り30分である。

solved数を見ると、やはりCもDもかなり解かれている。これは解けるべき問題だったので、チャレンジしてよかった~という気持ち。EFはもうペンペン草も生えない不毛の荒野と化しているので、満を持してA問題に再度向き合った。無向辺のつもりでa->bb->aを両方張ると一瞬で終わることに気づく。2べきで一生考えていたが、どうにもうまくいかない。そもそも、ループを2つ組み合わせたらそれ以上新たにつなげるのが難しくなる。残り5分で3のべき乗じゃないかと考え、三角形をたくさん作ってみたが、全然うまくいかず、絶望のうちにコンテスト終了となった。

Dに取り組んでいるあたりはコンテスト時間足りないと感じていたが、終わってみればAが結局解けなかったので、むしろこの時間で終わってよかったという感じ。TLに流れてきたi->2i,2i+1という解法を目にした瞬間、あまりのシンプルさに絶望する。これでAGC-Aは2連敗。

コードゴルフをしていたところ、A問題は1..Nを2回出力すればよいことに気づく。これは0-indexed2i,2i+1を出力している。実現する方法はいろいろあって、Rakuは18B、dcffと2回出力するのは17B、Vimseqの出力をヤンク&ペーストするのは14B。ここで打ち止めかと思ったが、sedで11Bを達成できた。

atcoder.jp

面白い。まずs/^/seq /Nという入力をseq Nに変える。eオプションで、シェルスクリプトとして実行した結果に置き換える。これで1..Nが得られた。そのまま処理を終えるときに1回出力されるが、2回出力する必要がある。pコマンドを使ってもよいが、s///に存在するpオプションが(文を区切る必要がなく)短い。置換が行われたときだけ出力してくれるが、今回のコードでは必ず置換が行われる。

EとFも読んでおく。Fはまあよくわからないなあという感想しか抱けない。Eの問題設定のシンプルさはすごい。これに1800点がついて、3時間半で0ACなのはいっそ感動的ですらある。

ラノベを2冊読んだ。まず「異世界でチート能力を手にした俺は、現実世界をも無双する7」。テンプレチーレム無双。爽快感はあるので好き。

次に「隣のクーデレラを甘やかしたら、ウチの合鍵を渡すことになった」。これは非常に面白かった。最近よく見る「隣人のクール美少女と半同棲する」話。ただ序盤から一気に溶けていくので、クール美少女過激派にはおススメできない。なろう発でもなさそうだし電撃大賞の応募作品でもなさそう。どういう経緯で出版されたのか気になる。続きも気になる。僕は実は溶けてからが好きだったりするので、続刊で描かれるだろう学校での交流とかも非常に楽しみ。かなり売れてそうなので間違いなく続刊は出るだろう。

これで今月読んだ本は31冊となった。1日1冊。年単位で集計したら全然足りない。現在は366-105冊なので、あともう6冊読んで、せめて1年で366-99冊読んだことにしたい。3桁と2桁の違いを気にしている。

ECR100の録画の編集を始めた。まだF問題を解いていなかったので、解説を読んでACしておいた。全然考察できていなかったな、という感想。特に周期の長さが決まることに気づいていないのはよくなかった。勘付くくらいはしてよかったはず。C問題の途中までセリフを入れたら午前10時になったので、いったん切り上げる。

布団に入って少しだけハーメルンを読み、就寝。午前11時。

12/27(日)

午後6時くらいに目を覚まし、そのあと二度寝できずに午後7時くらいに起床。食事をしてシャワーを浴びる。AGC051。

AB二完で177位。パフォーマンスは2255、レートは2691→2654(-37)。ひどい、が、仮にもBは800点だったので、Aで3回ペナを生やしたにしては最悪ではないはず。

まずA問題。一目見てわからない。正方形と正三角形は分割できるので、どんな正整数dでも1通りはありそう。ここで順位表を見るとみんなペナを生やしているので、全部1ではないだろうと感じる。何を思ったか、dが2べきでないと作れないと考えてしまう。さっきの考察をすべて放り投げてこれを提出し、当然のようにWA。次に疑心暗鬼になり、全部1を提出して同じくWA。このあたりでようやく真面目に考える。

d=2の場合をよく見ると、内部の状態は正方形と正三角形がずれて2通りあることに気づく。これだ!と飛びついて2^(d-1)を提出し、WA。さすがに顔面真っ青になってよくよく見ると、内側に行くにしたがって辺の長さが(a,b)から(a-1,b)または(a,b-1)になることがわかる。これはcomb(2d,d)で、いちばん外側の回転を考えるとcomb(2d,d)/2。ようやくAC。

B問題に進む。Lの鏡映の形に並べるとよさそうに見えるが、実際に計算するとどこまで大きくしても2倍弱にしかできない。それでは、とこれをくっつけて繋げても同じ。そこで、Dからは全部見えるようにちょっと離して3つ並べることを考えると、どうやら再帰的な形になりそう。比も2倍を超えた。さらにもう一段階大きくして計算した結果、見える個数の比が指数的に増えることが分かったので、実際にフラクタルな図形をプログラムで生成してチェッカーに投げた。良さそうなので提出し、手元の出力を再度確認していたらすぐACが帰ってきた。

そのあとCに2時間、Dに1時間半をかけたが、どちらも解けなかった。Cは最初、2x3の長方形だけじゃなくて3x2の長方形も使えるとなぜか考えてしまっていた。これだと全部の黒マスを左上に集めて全探索できるので、誤読に気づいた後も端に集めることをずっと考えていた。解説にある不変量らしきものも発見していたが、僕はこれを具体的に操作した結果として得ていたため、それを不変量だと認識したうえでの考察ができなかった。ある黒点(x,y)(0,y mod 3)(0,y)(x,y mod 3)に変換できるが、こういう操作で考えると(操作前も操作後も)x==0を特別扱いする必要がある。Dはマジで何もわからない。適当に変数を2つおいて立式したら二項係数3つの積の和が出てきて、WolframAlphaに投げたり計算量が少ないとうれしいなと思ってサンプルを試したりするにとどまった。

僕と同学年の競プロ事情に関する話題が出てきたので、夏季セミナーの写真や情報オリンピックの名簿を見たりして懐かしい気持ちになる。夏季セミナーにおける僕のふるまいは思い返してみれば黒歴史にふさわしいものであったので、深く考えないことにする。

今日もラノベを1冊読んだ。「痴漢されそうになっているS級美少女を助けたら隣の席の幼馴染だった」3巻。読みづらいと感じながら読んでいたが、この読みづらさはセリフをしゃべっているキャラが即座に判断できないことに起因しているように思う。原因の多くは自分の読書姿勢に帰属していて、「場面におけるキャラの(物理的な)立ち位置を想像せずに読んでいる」「そもそもキャラと口調をまともに覚えていない」がある。

月曜日はこどふぉに出たらすぐ寝て、火曜日の帰省に備えたい。それまでに動画も完成させたい(実家には編集環境はない)ので、明日の夕方が勝負どころか。

週記(2020/12/14-2020/12/20)

12/14(月)

前日の午前10時に就寝、午後6時に起床。土曜日に届いたはずの生協の弁当5食を2日で消費してしまい、食べるものがない。いや、パスタのストックはあるんだけど、茹でたりする操作が面倒で仕方がない。冷蔵庫にりんごがあったので食べた。貰い物だ。

サークルの解説会の準備をする。今日はARC110の予定で、A問題とD問題は解説役に立候補してくれた人がいるので、B問題とC問題を準備する。C問題を用意している途中で解説会の時間になってしまったため、先にD問題をやってもらうことにしてその間に作りあげようとする。

D問題は組み合わせを使用する場合の数の問題だ。僕は解説の方法(言い換え)で解いたので、マス目の経路の数え上げに帰着する方法は解説会で初めて聞いた。こっちもかなり天才的だと思う。形式的冪級数はいまだに手を出すタイミングをつかみ損ねているテクニック。

布団に倒れこんでいたらJOI二次予選の問題が公開された。コードゴルフをしようと思って見に行ったが、難易度的にそんな縮めるような問題ではなかったので、ゆっくり解くだけにした。TLでいくつか言及を目にしているので、全部1から考察というわけではない。

A問題はいうことなし。B問題はゴールから幅優先探索だ。古代ICPCみたいな問題だな。C問題は祭りをスキップする理由がないことに気づけば簡単。D問題みたいな問題は大体担当する場所が区間になるので、今回もそうだろうと信じると通る。

E問題はTLで盛んに言及されていた問題。3-SATの形に直してもいいことは何もないので、意味をもとにして考えることにする。自由度的に考えればスパイじゃない人ができるだけ多いと嬉しくて、ではスパイでなければならないのは?というのをいろいろ試してみると、結局ABもスパイのときにCもスパイになるのが唯一の場合であるとわかる。新たにスパイになった人を検出するとその周りだけ調べる、という風に更新すれば十分高速。

3-SATの形にすると各クローズは¬A∨¬B∨Cの形で書けるが、このように全てのクローズで否定されていない変数が1個以下であるようなSATをHorn-SATというらしく、線形時間で解けるらしい。解説スライドによれば、E問題を解くのに使ったアルゴリズムと似たようなことをするそうだ。

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

無向グラフの全域木の個数を数え上げる問題に落ちる。これをググると行列木定理というものに行き当たったので実装したら通った。かなりびっくり定理だと感じる。こんなのPCKに出したって検索なしなんだから解けないだろ……。

mizuwater0.hatenablog.com

証明を探したらあった。自分でも追えるレベルで書かれていてうれしい。証明方法を忘れたとしても、主張だけでもちゃんと覚えておく必要がある。

AtCoderの解説作成ボタンが復活したらしい。

ラノベを読む。「羽月莉音の帝国」1巻。信じられないくらい面白かった。設定が僕の好みにピッタリ合致していてたまらない。序盤急成長しすぎじゃないか?と思うこともあったが、最初にちまちまやっているのはいくら現実的だとはいえラノベとしては面白くないのだろう。

雪が降るなかゴミ出しをした。思いっきりパジャマで外出したのに人目に触れてしまって失敗。もっと朝早くに行く必要があった。

昼前までかけて「羽月莉音の帝国」を一気に4巻まで読んだ。奥付を見ると刊行ペースが異常に速くてすごい。3か月に1冊以上のペースである。面白いのでまだまだ読んでいたいが、火曜夜はサークルでこどふぉバチャがあるのでそろそろ寝ておかなければならない。

正午、就寝。

12/15(火)

午後8時、起床。食事してすぐサークルバチャに参加する。今日は#549。本当は#545の予定だったが、これはコンテスト時間が2時間半で、午後11時半から予定されているリアルタイムのコンテストと間がないため2時間のものに変えてもらった。#545は明日に回される。

Bはダブリング。先頭の値さえ決めてしまえば、順列pを対応させるためにどれくらいシフトすればよいかわかるので、できる。あとはそこから2個ぶん、4個ぶん、……と先に進めていけばよい。

Cはずっと考え込んで、実は放物線が条件を満たすかチェックする場所は少ないのではないかと思って実装した。頂点から左右に離れるにしたがってy座標が2乗のオーダーで増えるので、左右に1000も調べれば事足りそう。分数で持とうとしたらオーバーフローしかねなかったので、そこも含めていろいろ注意して書くと通った。

想定解を読んでみた。放物線の方程式y=x^2+bx+cを式変形してbx+c=y-x^2に直してみると、座標(x,y-x^2)における直線を表していることになって、そのように変換した頂点集合の凸包の上に乗る直線をカウントすればいいらしい。天才的。

こどふぉdiv.3に出る。ふと思い立ってコンテスト中の画面を録画してみた。Bandicamの試用版を使っていたのだが、制限がかかっていて10分ごとに切れたのでちょっとびっくりしてしまった。E2で誤読した結果初手が違うのを修正するのに非常に時間がかかってしまった。

録画したものはゆっくり実況に仕立てて投稿することに決めた。なぜならやってみたいからだ。早速ゆっくりムービーメーカー3を落としてくる。

なぜかmp4を読み込んでも動画が映らなかった。いろいろ試行錯誤した結果、wmvファイルに変換してみたところうまくいった。とりあえずexoファイルに出力してAviUtlに持っていけるかどうかまで確認することにしたら、今度はAviUtlで動画が読み込めない。wmvが悪いのかと思ってaviファイルに再度変換してみても動かない。

結局AviUtlに入力プラグインを入れたら一瞬で解決してしまった。AviUtlってくらいだからデフォルトでaviファイルはなんでも読み込めるものと思っていたが、いろいろあるらしい。このあたりの話は全然知らないので必死でググっていた。

何とか動画の書き出しまでできたようなので、本格的に実況動画を編集していく。ゆっくりムービーメーカーの倍速はあんまり安定しないみたいで、そのあたりを確認しながらセリフを合わせるのはあきらめることにした。7時間くらいぶっ通しで編集し続けて、午後10時前にひとまずの完成を見たため、AviUtlで動画を書き出してみた。

死ぬほどずれていた。まずスタートから違うし、後半はほとんど静止画像になってしまっていた。原因がわからず途方に暮れていたのだが、AviUtlのほうで動画の詳細を確認すると、再生開始のフレームなどの値がおかしなことになっていることが分かった。ゆっくりムービーメーカーで編集するのはあまりよくないらしいので、泣く泣くAviUtlのほうで全部手作業で修正することにする。

セリフはすでに時間まで指定して置かれているため、そこに動画を合わせようとしたところ、どうにも合わない。ゆっくりムービーメーカーのほうで再生したものと突き合わせて比べてみてもよくわからないが、どうやらゆっくりムービーメーカーのほうでは全体的に時間の進みが速かったようで、その微妙に速い再生速度に合わせてセリフが置かれていてどうしようもない。泣く泣く1.3~1.5倍速くらいにして尺を合わせるが、どうしても想定していたセリフとズレてしまうシーンが出てきてしまった。そんなのを全部修正するのはさすがに絶望的なので、初めてだし……と自分を納得させて諦める。

そんなこんなで全体の修正が完了したのが11時。動画の書き出しに30分くらいかかるので、その間に学食に行っておく。帰ってきて書き出された動画を最後にチェックし、まあゆっくり実況の体裁をなしていたので投稿した。

見返すたびに粗が見つかる。自分が重要だと思ったものをいくつか書き残しておこう。

  • 話題が切り替わるときはセリフの間をしっかり開ける
  • 無理してセリフの末尾に読点を入れなくてもよい
  • コンソールの文字がつぶれて見えない
  • 考察を全カットするのはまだしも、実装をほとんどカットするのはよくない
  • ゆっくりがしゃべっている間でもコーディングは倍速しておくのがよさそう

録画環境も含めてまた何とかしておきたい。動画はまだ出したいという気持ちがある。午後3時、就寝。

12/16(水)

午後8時半、起床。昨日学食に行ったときに買っておいたパン等を食べて、こどふぉバチャに備える。今日は#545。

Aは座圧。適当に実装したら1000ms以上かかっていてビビる。BはZ-algorithmでどれだけ重ねられるかを調べるが、この時の判定で頭のおかしなことを書いていたため1WA。

CはSCCして気合い。本当は全頂点で週のそれぞれの日スタートの最大値を求めたいが、さすがに間に合わない。そこで、強連結成分ごとに1つ代表する頂点を決めて、それだけ計算しておく。他の頂点については、代表する頂点との距離をいくつも(ループを周回すると変わるので)求めておいて、それで日数を補正して計算すればよい。

解説を見たら頂点と曜日を組にしてSCCしていてびっくりした。確かにそうであることだなあ。サークルバチャの反省会でSCCって言われたのはこのことかと納得。僕は自分の解法が絶対的に正しいと考えて喋っていたので、公式解説の解法を念頭に置いていた人とは話が食い違っていたのかもしれない。

D問題は制約が1000で動かせる駒が10個あるから2^10を何か利用するのだろうなと思っていたが解けなかった。適当に実装したがずっと2番目のテストケースが突破できなかった。あきらめて解説を読んだところ、駒は3つでもよかったらしい。天才的すぎた。泣きながらupsolveしようとしたら80番目のテストケースでWAしてさらに涙が止まらなくなった。

昨日言っていた録画環境について少し考える。いろいろキャプチャソフトを調べていたところ、NVIDIA GeForce GTXシリーズのグラフィックボードを使っていれば使用できる公式のキャプチャソフト「ShadowPlay」があるらしいので、それを利用することにした。完全無料である。素晴らしいではないか。

GeForce Experience - NVIDIA GeForce グラフィックス カードの強力な支援ツール | NVIDIA

イクラをすると思って買ったグラボだったが、今まで塩漬けになっていた。こういう形で役に立てることができてうれしい。

同時にゆっくりムービーメーカーもバージョン4に切り替える。ShadowPlayで録画したmp4を試してみたところちゃんと読み込めたのでうれしい。AviUtlとの連携も上々。

朝になって外を見たら結構雪が積もっていて楽しい気分になる。家から出る用事がないのでなんの心配もない。雪が降っているのを見るのは好きである。ただどうにも粒が小さい。とても大きな雪が灰色の空からゆっくりゆっくり落ちてくるのを口を開けて眺めるのが究極かつ至高な雪の眺め方であると信じてやまない。

昨日のこどふぉを確認してみたところ、E1が落ちてしまっていた。それに伴い順位もとんでもないことになっていた。せっかく動画を作ったのに、その回で落ちるのは非常につらいものがある。順位も「そこそこ良い」みたいな言及をしたくせにそこから転がり落ちたので決まりが悪い。

先週のABC185は、B問題とF問題がclimpetさんに取られたままになっていた。頑張って粗探しをする。B問題については言語をAWKに切り替えることで縮んだ。数値を1つずつ、符号を切り替えながら処理しようとすると長くなるが、2つ組にして処理すると短かった。F問題はPerlのまま更新できた。もともとサブルーチンでループしていたところを、再帰呼び出しに変更した。かなり遅くなると思っていたが、ギリギリTLEしなかった。

午前12時半、就寝。

12/17(木)

午後8時半、起床。起き抜けにヒカキンに24時間密着する動画を視聴した。動画最後のじゃんけんに負けて辛く悲しい気持ちになった。

食事をして、PCKの問題を1問解く。昨日のキャプチャソフトのテストもかねて録画しておいた。ゆっくりムービーメーカー4の設定をする。こちらでゆっくりを動かすのは、ほとんどプリセットされていたバージョン3に比べて少し難しい。

えでゅふぉ100に出る。100回目!5完だった。D問題で深く考えずに特攻したら思ったより難しくて時間を使ったように感じていたが、実際D問題を解いた直後に順位表を見ても1ページ目にいたので、みんな爆発していたのかもしれない。そのままE問題もそれなりの速度で解いて、システス前の順位は11位くらいだった。今回もスクリーンキャプチャを録画した。

えでゅふぉは後回しにして、まずPCKの問題を解いた録画をゆっくり実況にする。今回はテストの意味合いが強いと思っているので、長さもなるべく抑える。

ゆっくり魔理沙の語尾は「~だぜ」を代表とする男口調が一般的だと考えているが、ゆっくり霊夢の語尾は悩む余地がある。1本目の動画を作成した時には、できるだけ「~だよ」「~だね」を使用して中性に寄せていた。これは、ゆっくり霊夢と動画投稿者(自分)を同一の存在とする認識が根底にあったからだ。しかしこれはちょっと難しいと感じていた。ところどころ、不自然な(書いていて真っ先に思い浮かぶものではない)語尾を使用することになっていた。そこで今回は、自分とゆっくり霊夢を別個の存在であるとして、ゆっくり霊夢には女口調でしゃべってもらうことにした。それほどあからさまではないが、「~わよ」「~ね」などの語尾が現れるようになった。そういう決定を下したのは編集の終盤だったから、最初のほうは普通に「~だよ」が連打されているが、そこまで直す気力はなかった。台詞を結構詰めているので、発音にかかる時間が変わると全体が少しずつずれてしまう。

設定として、実際にゆっくり霊夢がコーディングしているところにゆっくり魔理沙が口出しするようなものを考えているので、視点は相変わらず自分と同一である。

今回の画質はフルHD、1920×1080だ。動画時間は1本目の半分なのに、ファイルサイズは2倍になっていた。縦横2倍なので当然のこと。きれいな比例関係だ。

今回も効果音は一切ないが、ゆっくりの表情をいくらか変更した箇所がある。ゆっくり霊夢は目を閉じ、ゆっくり魔理沙はジト目をするようになった。ほかの表情はたくさんありすぎて使えなかった。

4時間くらいで編集が終了し、午前7時すぎにアップロードが終了した。

前回自分で指摘したポイントはすべて考慮したが、今回もさらに自分で直したいポイントを見つけたので、列挙しておこう。

  • 喋ることを決めてから動画の尺を合わせるように倍速編集をする
  • 解説をするつもりならちゃんとする
  • 特に二分探索で区間の両端は何を表すか、セグメント木に何を乗せるかには言及したかった

最初にコーディング風景を4倍速にすることに決めて、画面に合わせるようにゆっくりのしゃべる内容を決めてしまったが、これはあまりよくなかったのだろう。

正午くらいに就寝。

12/18(金)

午後8時くらいに起床。昨日上げた動画にミスの指摘があった。ローリングハッシュにおける素数と基数の関係を「互いに素であればよい」としていたが、これは誤り。

じゃあ1素数-1はダメだよ、と書いておくか……と修正したが、これも正確には違うようだ。乗法群における位数が大きければ大きいほど良い基数となるらしい。どういう風に書けばよいかわからなくなったので、間違っていることだけ書いておくことにした。

ラノベを読む。「羽月莉音の帝国」は、昨日と一昨日で5、6巻を読んでいた。7巻と8巻を読む。信じられない勢いでスケールアップしていて非常に爽快。1巻のはじめでは借金300万がどうのという話をしていたが、桁が8つ違う。信じられないくらいのサクセスストーリーで非常に面白い。10巻の完結までもう秒読み、いよいよ展開は最終局面を迎えたように感じられる。この後どのように話が閉じられるのか、すごく気になる。さっさと読んでしまおう。

朝方、TechFULコーディングバトルの32回に出た。この週記が公開されるのはイベント終了前なので、詳しいことは書けない。ただ、今回はシンプルに僕の実力不足で不本意な点数を取ってしまった。

えでゅふぉ100の録画も、全完はしていないが編集して投稿したいと思っている。しかし土曜日にはABCもあり、こちらも録画しておきたい。動画編集はかなり時間を食うことが分かったので、こういう風に溜めたりしてモチベーションを少しでも失えば、途端に投稿しなくなってしまうだろう。帰省で編集できる環境から離れても同じことが起こると思われる。

昼になって布団に入り、ハーメルンの更新を確認していたところ、「このすば*Elona」の更新が来ていた。およそ4か月ぶりか?うれしい。1話ごとの長さが長めなのもうれしいところ。

この日は寝落ちした。ブラウザの閲覧履歴を見るに、11時半ごろだったらしい。

12/19(土)

午後3時くらいに目覚ましで目を覚まし、そのあと30分ごとに寝たりうつらうつらしたりして弁当の配達を待つ。午後4時半ごろに配達されたのに何とか対応することができた。今日は午後6時半ごろからこどふぉがあるが、それまで微妙に時間が空いている。かなり眠いけどそのまま起きているかもう一度眠るかかなり迷った。迷っていると目が冴えてなかなか寝られない。

普段ならあきらめて起きてしまうところだが、今回はこどふぉよりもそのあとにあるABC186を見据えて、こどふぉを寝過ごすことも視野に入れてちゃんともうひと眠りすることにした。1時間半後の午後6時、問題なく起床できた。これは目覚ましによるものである。

こどふぉはABの2完で終わり。Bは1004が通ることをなぜか信じられなくてずっともっと速い解放を考えていたため、かなり遅くなってしまった。そのうえC問題が解けず最悪。BとCの間に結構な崖ができていた。2707→2642(-65)。

こどふぉは午後9時まで言及が禁止になっていたので、こどふぉとABCの間の30分は無になった。ABC186である。これは録画してまたゆっくり実況にするつもりだ。

AからDまではかなり速かったと自負しているが、EとFはそこそこ時間をかけた上にペナルティまでつけたので、終わってみると順位はそれほど良くない。ただA問題のFAが取れたので、動画映えはするだろう。全完後のコードゴルフの模様も録画しておいた。

D問題は過去に出題された問題とほとんど一緒である。コンテスト中に45Byteの解を作って提出した後、過去の問題のShortestを参考にしようと思って最短コードを見てみたところ、46Byteだった。深く考えず同じコードをこちらにも提出してしまったが、そのあとこれはまずいのではないかと認識する。とりあえずatgolferのbotを確認したところまだ拾われていなかったので、急いでサーバーをシャットダウンした。

自分ではそんなに悪いことをしたという感覚がない。このことについてツイートして、自分でもいくらか考えてみた。そもそも過去の既出問題であってもコンテスト中に書いたのと全く同じコードを提出するのがダメで、コードゴルフに関連する形で問題が表出したから感情的に反発しているのだろう。

日付が変わったあたりから、今日のABCの動画編集を初めて、午前7時くらいに完成した。動画を出力してYouTubeにアップロードしたところ、ファイルサイズが大きすぎるとはじかれた。不思議に思って動画ファイルのプロパティを確認したところ、150GBもあった。15分の動画なのにこれはおかしい。YouTubeトラブルシューティングで「ファイルサイズの制限に引っかかる」みたいな項目を見ると、エンコードをしろと書いてある。

僕は動画ファイルを出力するのがエンコードだと思っていたけど、実際はデフォルトで無圧縮の出力がされていたらしい。ちょっと調べてエンコーダを導入し、出力してみたところ、なんと66MBになった。本当にびっくりした。これまで投稿した2本の動画はどちらもファイルサイズが数十GBだったが、これは無圧縮だったからのようだ。問題なく投稿できるどころか、以前はアップロードの待ち時間が30分くらいあったのに今度は一瞬である。

今回は効果音がついているし、霊夢魔理沙の表情も幾分豊かになった。テキストを用いて見えにくいコードを表示したり、考察をtexで清書して表示したりといろいろやってみている。解説もそこそこ丁寧にやったつもりだ(特にF問題)。今回の教訓は以下。

  • 字幕を幅いっぱい書くと動画にしたときに見切れる
  • 相変わらず倍速してから尺に合わせてしゃべっている

C問題以降のコードゴルフはダイジェスト式に編集したが、これはよかったのではないかと思う。

A問題からD問題までは3分もかかっていないので、ここは等倍でそのまま流した。等倍なら時間の感覚がある。しかしE問題とF問題で倍速を使用し、こちらは時間の感覚が破壊されてしまうため、なんとなく臨場感がなくなってしまう。かといってカットを多用するのは競プロの試行錯誤の過程を全部ないがしろにしてしまう感じがしてどうだろう……。悩ましいところだ。割り切って編集スタイルをどちらかに寄せるのがよさそう。ただ自分で見てるとバグったコードを必死に書いている時間は滑稽なんだよな。

今回、ゆっくり霊夢の口調は完全に「~わ」「~ね」に振り切っている。「~わ」が連続してしまう箇所がいくつかあって、そこでは「~よ」を適度に挟んでいる。

羽月莉音の帝国」の9巻を読んだ。いよいよクライマックス。というか予定されていることを考えるとあと1巻でシリーズが完結するのが信じられない。どのような過程がどのように描かれてどこに着地するのだろう。いろんな想定がありえて、10巻を読むのが怖くもあり楽しみでもある。10巻の扉近くのページだけ読んでいたが、これまで各巻の主要人物が紹介されていたページに革命部5人だけしか描かれなくなっていて非常に不穏。

寝る前まで定期的に投稿した動画の再生回数を見ていたが、すでに200回再生に届こうとしている。やっぱりABCってだけで耳目を集めるのだろうか。こどふぉとかやってる場合じゃないな。他にはA問題のFAをプッシュしたのもよかったのかもしれない。

正午近く、就寝。

12/20(日)

午後9時起床。昨日投稿した動画がかなり伸びている。1000回再生を突破していてびっくり。やはりAのFAが注目されているようだ。動画のURLツイートの引用リツイートを見たり、リツイート先を見に行って言及を確かめたりしていた。

動画の冒頭に置かれているから、数秒で当該シーンを視聴することができる。さらに2、3分見るだけでD問題までの速解きを把握できる。見るだけで何が特徴的なのかわかる物事は動画映えする。ただ「速い」だけ。

ただ、これを認めてしまうと、競プロ実況動画がなかなか作成できなくなってしまう。そういう目に見えて特徴的なことが起こるコンテストなんてそうそうないだろうし、「解説しながら解く」タイプの動画に落ち着いてしまうのだろうが、それは文章でよい。そもそも図を作成するのを面倒がっているため、解説動画の作成は致命的に向いていない。まあ自分は腐っても日本で上位50人に入るプレイヤーであるから、そういう人間がどのようにコンテストに参加しているのかを実況することに何らかの需要があると信じて続けていきたい。

ラノベを読みつつ、日付が変わった直後のこどふぉを待って、参加した。pretest時点ではABCDが通っていたが、C問題はシステスで落ちてしまった。3完で2642→2643(+1)。

Aはルークの動きをイメージするのが難しいので純粋に数字の入れ替えの問題として捉えるべき。Bは直感的に11...00か00...11の形しかないことがわかるが、念のため示した。

Cは実験するとかなり何でもできることがわかる。僕は下から偶奇でつじつま合わせをしていったが、これは誤りで、上のほうの桁を変えると全部反転してしまう。正解は上から貪欲らしい。各桁で使える個数がたくさんあるのに、なんで貪欲ができるのかよくわかっていない。

Dは無限場合分け。1つだけ2種類両方試さないといけないことに気づいて、それに対応するためにコードを思いっきり書き換えたのがよかった。試すための関数を別に用意して、それを何回も呼び出す。これまでifとelseを連ねていろいろ分類していたが、条件を満たす場合を全部計算してしまうことにするとより安心できる。

Eは全然わからなかったが、Grundy数は最大でO(sqrt M)くらいになるらしい。これ何回も見たことあるな。あとは確率の遷移行列を書いて何かするんだろうけど、実はそこから先はTLで解法ツイートを見なかったのでわかっていない。

羽月莉音の帝国」の10巻を読んだ。非常に良かった。終わり方もかなり良い。ネタバレは絶対にしたくないので、何も書かない。著者の至道流星さんはほかにも経済ラノベをいろいろ書いているようなので、買いあさりたい。

シリーズの途中で主人公の羽月巳継が「ネットはそれほど強い力を持たない」といったことを言う。そのあたりは微妙に不穏な空気が漂うシーンだったので、ネットが何かの障害となる伏線かと思ったのだが、特にそのようなことはなかった。結局、この発言はラノベが書かれた2011年ごろの認識によるもので、今(つまりネットが実社会に強く影響を及ぼすようになった時点)から見ると違和感があるというだけだった。

月曜提出のレポートが2つある。朝までのCGレポートと、夜までの幾何学序論。とりあえずCGを片付ける。

幾何学序論は前回のレポートを書いてからの講義内容をまずチェックしなければならない。チェックした後レポート問題を読んだが、なぜか急にやる気を失ってしまいハーメルンを開いてしまった。Game of Vampireを読み返していた。やっぱりこれ好きだなあ。

冷静になると、夜のサークル解説会はまだ1問も解説役が決まっていないのでスライドを用意しておく必要がありそうだし、レポートも1文字も書いていなくてかなりまずい状態。とりあえず寝ようと思って、寝る前に日記を書いていたら午後3時半になってしまった。シンプルにヤバい。

週記(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特有のシステムに慣れてもらうためにも、模擬国内予選には参加してもらうべきである。また、本番前のリハーサルも行うべきである。