2026年夏 知らなかった語彙・表現一覧

これは,僕が日常生活の中で初めて出会った語彙・表現などを列挙するものです。文脈や漢字などからある程度意味が推測できるものも載せています。意味に関しては一般的なものよりも,文脈に合った特定のものを書いています。参考程度にとどめて,ご自分で調べることをお勧めします。

6月

語彙・表現 意味など
妙味 えも言われぬ面白さ
四つ辻 十字路
ラポール rapport 信頼関係
幼少の砌(みぎり) 幼い頃
人を喰った 人を見下して小馬鹿にした
エレガ エレベーターガール
晴眼者 視覚障害のない人
値踏み 価値を見積もること
芋を引く 怖くて及び腰になる
サテン 喫茶店
ひらにひらに ぜひともどうか(お願いします)
煤煙(ばいえん) すすと煙
迂遠(うえん) まわりくどいこと
諒(りょう)とする よしとする
のたくる ミミズのはったような下手な字を書く
ムエット mouillette 香水などの匂いを確かめるために使う紙

7月

語彙・表現 意味など
しけもく 吸い殻
強弁(きょうべん) こじつけて無理な主張をすること
義を見てせざるは勇無きなり 人として当然すべきことだと分かりながらもそれしないのは勇気がないからだ(そのため勇気を出してすべきである)
ケバい (服や化粧が)派手な
該博(がいはく)な知識 幅広い分野の豊富な知識
薄暮(はくぼ) 夕暮れ
スタンドアローン stand-alone システムが外部から独立して使えること
オープニングアクト 前座
とっぱらい 報酬を当日に現金で払うこと

8月

語彙・表現 意味など
かぶり (特に寿司屋で)持ち帰り
局限 ある範囲に限定すること
薨去(こうきょ) 天皇ではない皇族の方などが亡くなること
禿頭(とくとう) はげ
いらち 短気
入定(にゅうじょう) 高僧が亡くなること
素懐(そかい)を遂げる 往生するというかねてからの願いが叶う
あたぼうよ 当たり前だよ
四分五裂 ばらばらになること
たおやかな しなやかで上品な
謹厳な 真面目な
危急存亡の秋(とき) 生存か滅亡かの瀬戸際
虚飾 うわべだけ飾ること
つんけん つっけんどん
掛け値(かけね)なしに 誇張せず正直に言って
出色(しゅっしょく) 群を抜いて優れていること
恬(てん)として 気にせず平然として

ICPC2026 国内予選参加記(Factorial of Sigma toku4388視点)

メンバー

  • k1suxu:競プロ担当。単純に競プロが強い。
  • Caryking:天才担当。実験して予想を立てるのが上手い。
  • toku4388:幾何と非競プロ担当。競プロの問題ではなくかつ実装が面倒なものを処理する。

だいぶ得意不得意がばらけています。だからこそ,どの問題に誰を割り振るかがかなり重要だと思っています。

前

模擬国内はいろいろかみ合って12位と,かなりの好成績でした。

大体は上記の通りですが,書かれていないことを少し補足します。

  • B:僕が担当しました。実装やや面倒だなと思っていたところ,ソートしたやつと逆順ソートしたやつを比較する解法を思いつきました。
  • D: \mathfrak{S}_4と同型なんですよねという余計なことを言う係をしました。思ってもあまり余計なことは言わないようにします。
  • E:Carykingくんがほとんど詰め終わっていて,最初に (0,0),(0,1),(1,0),(1,1)を聞いて,例えば (1,0)で2の倍数が返ってきたら (3,0),(1,2),(3,2)を聞けば,4の倍数になるのが1つあって……,を繰り返せばよいと言われました。僕はこれを, (x_{k}, y_{k})を聞いて 2^{k}の倍数なら,次に (x_{k}+2^{k},y_{k}),(x_{k},y_{k}+2^{k}),(x_{k}+2^{k},y_{k}+2^{k})を追加で聞くと,4つのうちどれか1つに 2^{k+1}の倍数がある,と翻訳し正当性を理解しました。多分これ僕が解いたら,ユークリッドの互除法とかをこねこねして沼にはまっていそうだなと言う感じだったので,振り分けは成功でした。 Carykingくんが実装を始めるときにジャッジは試さなくてもいいかなみたいなことを言っていましたが,さすがにそれは危ないなと思ったので,インタラクティブは
ll a, b;
ll ask(ll x, ll y) {
    cout << "? " << x << " " << y << endl;
    // ll res;
    // cin >> res;
    // return res;
    return gcd(x + a, y + b);
}

とか書くと特に面倒をかけずに入力を試せるよ,と助言しました。このテクはかなり有名だと思っていたのですが,終わった後にk1suxuさんに言うと,初めて見たみたいなリアクションをされてかなりびっくりしました。

  • H:Carykingくんが手で実験して予想しました。僕には正当性が何も理解できませんでしたが,何ができればよいかということをCarykingくんが言って,それをk1suxuさんが実装しました。すごい。

国内予選本番

A

大富豪という単語だけ聞こえました。

B

担当。直感的には貪欲でよさそうで,ちゃんと言うと区間スケジューリングの双対なので貪欲でいけますねとなります。正当性は確信していたものの,等号を入れるか否かが少し不安だったので,念のため確認してもらってから出しました。

C

k1suxuさんがstackを使ってなんかすればよさそうと言っていました。 n \times \mathrm{max}(d)が小さいのでグリッドを全部持って,壁の累積和を左右から取ればいいですね,と横から言う係をします。サンプルが合わないみたいなので確認すると,壁をimosみたいにしているのを観測したので,そのまま壁の部分を1で埋めて左右から累積和をし,どちらも正かつ壁でないマスの個数を数えればよい,と指摘しました。通ったみたいです。

D

こんなAtCoderみたいな問題出るんだというのがまず思うところでした。Carykingくんが, 2^{s}以降の規則は分かったということを言っていて,確実に正しいと主張したので全く自明ではなかったが信じることにしました。考察用紙を見ると,Carykingくんは一直線に数列を書いて実験しているようだったので,

1  xx x      x
2    x  xx
3 x    x  xx
4           x
5

のように2次元的に書くと見やすいのではないかと提案しましたが,結局採用には至らなかったようです。おそらくCarykingくんは数でそのまま考えた方が思考しやすいのだと思われます。このあたりの思考方法の違いは,模擬国内含めて練習会でも何回も経験してきたので想定内ではありました。しばらくすると,Carykingくんがなんか 2^{s}で分けて再帰すれば良さそうみたいなことを言っていました。なぜ正しいのかは全くわかりませんでしたが,計算量が問題なさそうかつ実装も軽そうなので,信じてくださいと言う言葉を信じて任せます。サンプルが合わないようでしたが,変数名をタイポしているのを見つけたようで,それを修正すると合ったようです。僕はやや不安だったのでランテスを書こうとしますが, s=4のときの結果が手での実験と合っているようだったので,ランテスを書かずに出すことで合意しました。一発で通ります。

E

k1suxuさんが,ジェムを連鎖させればジェム付きは1個買うだけでよくて残りを買うだけみたいな話をしているのを聞きました。ただよく考えると,ジェム付きでも自腹を切ったほうが得なパターンがあるんじゃないかという話になります。すると,k1suxuさんが小さい方から取って買ったものを交換したことにすれば自明な下界が達成可能と言って,一瞬良く分かりませんでしたが,よく考えるとこれは多分正しそうなので任せます。通ります。ここまで順調です。

F

四隅持って座圧すれば O(m^{2})個の頂点になって,ダイクストラして気合でいけそうという合意はできましたが,実装がやばそうです。実装は実装でもこれは競プロの問題なのでk1suxuさんが担当することに。結局ずっと一人でFの実装をさせることになってしまい,サンプルすら合わず。

G

結局出会うのは \lfloor \frac{n}{2} \rfloor行目しかないとCarykingくんが言って,多分そうなのでこの方針で詰めます。よく考えると, \lfloor \frac{n}{2} \rfloor行目をどうやり過ごすかが大事なので,この行について白が滞在する区間を w_{l}, w_{r},黒の区間を b_{l}, b_{r}としてみます。すると, w_{r} \lt b_{l}か b_{r} \lt w_{l}の2パターンしかないと分かります。ここで後者のパターンは,盤面を180度回転すると結局前者に帰着できると僕が主張し,前者の場合のみ考えることで合意します。

左上から \lfloor \frac{n}{2} \rfloor行目,左下から \lfloor \frac{n}{2} \rfloor-1行目,右上から \lfloor \frac{n}{2} \rfloor行目,右下から \lfloor \frac{n}{2} \rfloor-1行目に行く行き方の総数が欲しくなってくるので,左上から i行目の行き方の総数をDPで求めるパートを関数化した上で,左右反転・上下反転を繰り返すと上手くいきそうだとなります。

あとは, w_{r}を固定すると掛け算と足し算を頑張ればできるので,Carykingくんと協力しながら詰めていきました。途中で, n=2がコーナーになることが発覚したので,実装しているあいだにCarykingくんが全てのパターンを出してくれます。あとは気合でサンプルを合わせましたがWA。 n=2で3つくらい場合分けを書いた(というか書いてもらった?)ので,ここがバグっているのではないかとにらみますが,冷静に考えると合っていそうです。ここで, nが偶数のときに180度回転すると,行の対象が1だけずれてバグっていることが分かったので,修正を試みましたが,すでに頭が壊れていておしまいです。通し切れませんでした。

よくよく考えると,180度回転なんてちょっと粋なことをせず,素直に同じようなコードを2回書いた方がバグらせづらかったかもしれません。

後

結局5完で45位。学内1位なので通過できる順位ですが,欲を言えば6完や7完してもう少し上に行きたかったです。

近くの店で打ち上げをしました。ひとしきり普通の会話で盛り上がった後,最後の方に「目玉焼きには何をかけるか」という超初心者向け会話デッキで想像以上に盛り上がったのがハイライトです。

全体的に見てムーブは悪くなかったとは思います。ただ,細かい所を詰めるのが得意なk1suxuさんをFに奪われてしまっていて,GがFよりも競プロだったのにk1suxuさんを割り当てられなかったところが反省点だったかと思います。これは結果論かもしれませんが,おそらく僕とk1suxuさんでFとGの担当をswapしていれば,少なくともGは詰め切れていて,あとFは僕の気合次第でどうか分からない,といった感じだと思います。何ならFを捨てて3人でGを詰めるでもよかったかもしれません。

横浜ではさらに良い成績を取れるように,もっと精進します!

2026年春 知らなかった語彙・表現一覧

これは,僕が日常生活の中で初めて出会った語彙・表現などを列挙するものです。文脈や漢字などからある程度意味が推測できるものも載せています。意味に関しては一般的なものよりも,文脈に合った特定のものを書いています。参考程度にとどめて,ご自分で調べることをお勧めします。

3月

語彙・表現 意味など
訥々(とつとつ)と 言葉を詰まらせながらたどたどしく
剣呑(けんのん) 危険で不安
色止め 野菜を茹でたあとにすぐ水につけるなどして鮮やかな色を保つこと
バビる とても驚く
絶無 皆無
凡百(ぼんぴゃく)の (転じて)ありふれていて普通の
悩殺(のうさつ)する 誘惑する
会敵(かいてき)する 敵に遭遇する
哀惜の念 (死などを)強く悲しむ気持ち
奇特な 殊勝な
〜一円 〜全域
こまっしゃくれた (子供が)小賢しく大人ぶってませた
労せずして 苦労しないで
さしもの〜でも さすがの〜でも
精彩を欠く キレがない
スキール音 squeal 急な運転操作でタイヤが擦れてキーッとなる音
フケる (授業を)サボる

4月

語彙・表現 意味など
雲霞(うんか)の如く 人がたくさん集まっている様子
煩瑣(はんさ)な 煩雑な
スポークスマン spokesman 組織の代弁者
果報者 幸せ者
児戯に等しい 子供の遊びくらい価値のない
不興を買う (目上の人の)機嫌を損ねる
善後策 何か問題が起きたあとにそれをうまく解決する策
ティルト (ゲームにおいて)一度負けた後にイライラして,さらなる負けにつながるような冷静さを欠いた判断をしてしまう状態
猖獗(しょうけつ)を極める 良くないものが大流行する
啐啄(そったく)同時 学習者と指導者が息を合わせること

5月

語彙・表現 意味など
単車 バイク
メリケン粉 American 小麦粉
山吹色の (―お菓子で)賄賂の隠語
アバン avant オープニング前に挿入される短い映像
こんこんと 何度も丁寧に(説明する)
思潮 その時代の思想の傾向や流行り
高弟 特に優秀な弟子
白兵戦 刀剣や銃剣などを用いて近距離で行う戦闘
機序 メカニズム
贅を尽くした これ以上ないほど贅沢にした
斥候(せっこう) 敵の位置や地形などを偵察する人
悪し様(ざま)に言う (人などを)とても悪く言う
献杯 故人を偲んで杯を差し出すこと 乾杯と違って他の人と杯を合わせない
いまいま (今を強めて)今現在
面変(おもが)わり (やつれて)顔つきが変わること
末は博士か大臣か 子供の将来に期待して言う言葉

2025/2026年冬 知らなかった語彙・表現一覧

これは,僕が日常生活の中で初めて出会った語彙・表現などを列挙するものです。文脈や漢字などからある程度意味が推測できるものも載せています。意味に関しては一般的なものよりも,文脈に合った特定のものを書いています。参考程度にとどめて,ご自分で調べることをお勧めします。

2025年12月

語彙・表現 意味など
ケー番 携帯の電話番号
水をあける 競争相手に大きく差をつけてまさる
抗弁 相手の言い分に対して言い返すこと
皮相的な うわべだけの
詮無い 無駄な 仕方ない
象牙の塔 現実からかけ離れて込み入った学問の世界
虚礼廃止 お中元や年賀状などの形式的な儀礼をやめること
極北 (比喩的に)あることを極め尽くした極地
テレコになる あべこべになる
露悪 人間の醜悪なところをあえて見せること
ヌケサク 間抜け
コンサバ conservative 保守的な
逍遥(しょうよう) 散歩
目算 見当 予測
調伏(ちょうぶく)する 服従させる
公算 見込み 確率
瞠目 目を見張るほどの驚き
劣情 情欲
亡国 滅んだ国

2026年1月

語彙・表現 意味など
用向き 用事
オフトピですが off topic 話題からそれますが
無軌道な 行動が常識外れな
客死(かくし)する 旅先で亡くなる
仇敵(きゅうてき) 憎いと思う敵
よばれる (食事を)いただく
耄碌(もうろく)する 年をとって身体の機能が低下し衰える
滅私 私欲をなくすこと
堅調 堅実に増加傾向にあること
パントリー キッチン周りにある収納スペース
帰天 (カトリックにおいて)亡くなること
意趣返し 復讐
清新な 新鮮な
洒脱(しゃだつ)な 洒落た
蕩尽(とうじん) (財産を)使い尽くすこと
パチこく 嘘をつく

2月

語彙・表現 意味など
あみだにかぶる (阿弥陀如来の後光のように)帽子の前を持ち上げて斜めにかぶる
実入りが良い 稼ぎが良い
塗炭(とたん)の苦しみ とてもつらい苦しみ
つづら折り 何度もカーブがあり曲がりくねった山道
フレイル frailty(虚弱) 老化による心身の衰え
愚にもつかない くだらない
心を砕く 気を配る
出ずっぱり 最初から最後まで出演すること
とっぽい ずる賢い
ジングル テレビやラジオで合間に流れる短い曲 映像だとアイキャッチ

2025 ICPC Asia Yokohama Regional 参加記(K1NTOKI toku4388視点)

はじめに

5か月前の国内予選は,主に自分の失態により実装が大爆発してPCを占有したがために,解けるはずの問題を落としてしまうという惨憺たる結果でした。それを心にとめながら,当日までチーム練習を重ねて精進してきました。

チームメンバー

  • k1suxuさん
    典型枠です。順当に強い。高度典型をいろいろ知っていて,よく分からない謎のライブラリをたくさん持っています。複雑なDPとか無限場合分けを筋力で通しきる確かな力があります。
  • toku4388
    ほとんどやるだけだが実装を工夫するとうまくいくタイプの問題と幾何担当。90度回転とか反転でfor文にまとめられるときや,番兵を入れると場合分けが減らせると気づいたときに最も嬉しさを感じる。一応なぜか数学ができるということになっている。
  • kikutanさん
    天啓枠です。ある確率で天才をして,その問題に対するHint1とかHint2を言ってくれます。一つの問題を紙に書いて考察し続けて予想を立て,2人のどちらかと一緒に細かい所を詰めて通し切る,というのを何度もやってきました。これがはまると非常に強いです。
  • chimakiさん
    コーチです。去年はkikutanさんと僕と同じチームでYokohamaに出ました。

選手の名前から先頭2文字ずつ取ってK1NTOKIです。Nが入っているのが惜しいですが,なかなか気に入っています。き.*と.*きで検索をかけて僕が見つけました。

参加記の別視点はこちらから:

持ち込んだもの

Yokohamaには持ち込む量に制限がないので,とにかくたくさん持ち込みました。おそらく必要度が高い順に並べるとこんな感じだと思います。

  • 自分の普段使っているライブラリ+細かい事柄を説明付きでPDFにまとめたもの(32ページ)
  • kactl
  • 蟻本
  • 英和辞典
  • 『組合せゲーム理論の世界』
  • 『数学パズルチャレンジ超問120』
  • 『概説 確率統計』
  • 『代数学入門』

自分のライブラリは,もともとそんなに量がなかったこともあって32ページと少なめだったのですが,k1suxuさんはライブラリを200ページくらい印刷していて笑っていました。kactlを少し改変したものにk1suxuさんが集めたライブラリを全部付け足して,各種有用な記事も詰め込んでPDFにまとめたらこうなったと言っていました。与えられたグラフの長さ4のサイクルを数え上げるアルゴリズムとか,いつ使うんだよみたいなのがたくさんあってすごかったです。

ライブラリ印刷後の様子(左:k1suxuさんのライブラリ,中央:k1suxuさんが集めた記事,右:僕のライブラリ)

Day 1

初日はお昼からのスタートで,特段やることもないので気楽に臨みました。特に問題なく,定刻に全員が集まることができました。

リハーサル

僕は補完とフォーマッターがないと生きていけない人間なのでそれを強く主張し,VSCodiumを選びました。k1suxuさんがVimをたまに使うみたいですが,みんな競プロのときはVSCodeを使っているようなので,競合することもなくすんなり合意しました。去年の経験から,Inlay hintsをOFFにしたり.clang-formatを作成して設定を書き込んだりすると快適になることが分かっていたので,真っ先にそれをしました。いろいろいじった後に,適当なコードとかセグ木の写経とかをしていました。しかし,ここで少し困ったことが起きます。補完があるのはいいのですが,a.puまで打ってtabを押すと,a.push_back()となって括弧まで打たれてしまうのです。さらに悪いことには,a.push_back(x)まで打って)で閉じようとするとa.push_back(x))となってきちんと閉じてくれないことでした。通常であれば括弧を余計に打ってもきちんと閉じてくれるのですが,補完で出た括弧はうまく閉じてくれませんでした。いろいろ設定をいじりましたが,結局解決せず,括弧は出るもんだと強く思うことと,括弧を抜けるときは矢印キーで抜けることを意識することにしました。

おそらくこの辺の補完やフォーマット関係はclangdが管理していると思うのですが,この他にも,repマクロを使うとフォーマットが上手くいかなかったり,これは後で分かることですが,__int128_tとか__builtin_popcountとか標準で入っていないと思われるものたちの補完が上手く出なかったりしました。しかしコンパイルは無事に行われるので,参照しているところが若干違うのかなと思いました。

後はキーボードが少し高かったので,やや打ちづらいのが問題でした。そこで,大量に印刷したライブラリをパームレストにしたらどうかとk1suxuさんが大発明を提案してきました。200ページ超えの紙の束の上に手首をのせてタイピングしてみると,劇的に打ちやすくなりました。まさかこんなところで紙の束が役に立つとは思わず,変な感心を覚えました。

問題を解いたらFA以外のチームにも風船が渡されるようで,k1suxuさんに聞くとこれは復活したルールだとのこと。現地開催ならではの特別感があってとても嬉しい演出でした。

タイピング練習をしているうちに,リハーサルが終了しました。

帰宅

電車の中ではkactl(の特に幾何と文字列パート)を熟読して,何ができるのかを詰め込みました。謎線形時間アルゴリズムとか謎対数時間アルゴリズムがたくさんあって面白かったです。試験前に新しい知識を詰め込むのは良くないとよく言われますが,不安から詰め込みたくなってしまうのが人間というものです。

帰宅後は夕食を食べて,できるだけ早く寝ることに努めました。ただ,9時とかいう赤ちゃんみたいな時間には寝られないだろうと思い,小説の朗読を聞くことにしました。特に何も考えず『D坂の殺人事件』を選んだのですが,推理小説を選んだのは少し失敗でした。全体的に記憶が途切れ途切れで,最後の方に重要なワードだけ聞こえてオチのようなものはものはわかっているのですが,結局どうやって犯人が侵入したか分からず,なかなかすっきりしませんでした。後で文字媒体で読んでおこうと思います。

Day 2

9時に床に就いてからどれくらい時間が経ったか分かりませんが,おそらく10時くらいには入眠したと思います。朝,目が覚めると,目覚ましが鳴る10分前でとても気分が良かったです。きちんと起床できたことをメンバーに報告して家を出ました。Discordを眺めると,全員起床できたようで安心しました。

電車の中ではそわそわして落ち着かなかったので,TLを眺めていました。見ていると,昨日ABCのF問題がどうやらJOIで既出だったようで,TLを賑わせていました。解き始めてみると,F問題はすぐに解けたのですが,JOIの方の問題はその一般化になっていてとても難しく,しばらく考えていましたが解けませんでした。観念して解説を見ましたが,とてもきれいな解法で感動しました。

コンテスト開始前

自分はめちゃくちゃ緊張していたので,持ち込んだ『数学パズルチャレンジ超問120』をタネに雑談していました。ネックレスを箱の中に入れる問題が,パズル寄りの競プロという感じで面白かったです。結果的に緊張がほぐれたので良かったと思います。

トイレに行ったり準備をしたりとかしていたら,いきなり後5分で始めますと言われ,びっくりしました。その直後にやっぱり後数分で始めますとか言われて,さらにびっくりしました。去年もいきなり始めますと言われたのである程度想定はしていましたが,変更されることがあるとは思わず,かなり衝撃でした。

コンテスト中

E

自分の担当はEFGHだったので,その中から一番簡単そうな問題を読み始めます。ぱっと見Eがやるだけに見えたので,Eから取り組みました。しかし,cubeを直方体だと誤解した挙句,余りを出してはいけないと誤読,さらに出力すべき値は体積であると勘違いし,読解の精度はボロボロでした。そうして g = \mathrm{gcd}(a,b,c)として各分割を d = g/kと固定してよいという謎論理を展開。嘘に嘘が重なってなぜかやや正しい方向を向いていますが,間違った二分探索を書いて当然サンプルが合わず。このあたりで,なぜか出力が辺の長さであることに気付いて,直方体では全てが破綻していることを察知します。完全に冷静さを欠いていることを自覚したので,kikutanさんにはE問題の内容を全く伝えず,E問題を読んでくださいと頭を下げます。すると,cubeは立方体で,無駄にする豆腐があってもよい,まさに図の通りだと教えられ,愕然としました。図はなんか生成AIっぽかったので全く信用せず,なぜか自分の思い込みの方を優先してしまったのがお粗末でした。いや確かに,味噌汁から1×1×100の豆腐が出てきたら嫌な気持ちになりますね。

そうすると全ての矛盾が解消され,結局は \lfloor a/d \rfloor\times\lfloor b/d \rfloor\times\lfloor c/d \rfloor \ge kを満たす最大の dを見つける問題になりました。こんなの有理数上の二分探索でStern–Brocot treeじゃんと思いましたが,答えは有理数になることが証明できるという文を思い出して冷静になりました。証明できるということは,どうせ d = abc/u のような形で限定できるということです。なんとなく正しそうだったので,この考察の正当化をkikutanさんに投げて,実装に取り掛かりました。しかし,128bit整数を使ってもオーバーフローしているようで状況はかなり厳しかったです。すると,kikutanさんが,最大を考えるとどの3辺も損して余りが出ていることはあり得ないという主張から,この決め打ちが正当であることを示してくれました。なるほど賢い,となると同時に,それなら d = a/u, b/u, c/uのいずれかの形であることが証明されていることに気付きました。以上を丁寧に実装して何とかAC。(1:32経過)

A

この裏でk1suxuさんがDとHを通していてかなり焦っていました。ここでkikutanさんからIとJを聞いて,Iは...で区切っていけば両端の状態と長さの偶奇で決まりそうなこと,Jは2×2で周期になるんじゃないかという主張の反例があることを伝えましたが,詰め切ることはできませんでした。このときAも解かれていたので,Aも共有してもらいます。このとき「2×(とても長い)マスのグリッド上にタイルが置かれているので,タイルをスライド操作によって何回でも動かせ,空きマスに畳を敷き詰められるような盤面になるとき,動かすことになるタイルの枚数の最小値」を求める問題だと伝えられました。そのため,これは畳の状態を4状態でもって,まだ固定していないタイルの枚数を0 or 1 or 2でもってDPすれば解けそうだと伝えました。しかし,こういう細かいDPは全く得意分野ではなく自分で詰め切れる気がしなかったので,k1suxuさんに助けを求めました。しかしk1suxuさんも細かいところは分かっていない様子で,実装キューも詰まっていました。ということで,自分が渋々Aに取り掛かることになりました。

dp[iまでみて][畳かタイルで1列分の床がどれだけ埋まっているかj][今k個のタイルが未決定]として,気合いで遷移を書いていきました。途中,未決定のタイルの枚数を4枚まで引き上げ,宙ぶらりんになったタイルを固定するという遷移をいれると,多少は楽になると分かったのでそうしました。さらに座圧して飛ぶときにはその飛んだ長さの偶奇によって畳の状態がreverseすることも分かっていて, lにタイルが置かれていないときには置かれないことを要求することにすると場合分けが減ることにも気づいて,頑張って工夫しました。なんとか書き上がったはいいものの,当然ながらサンプルが全く合わず。ここからは悪い夢でも見ているかのようでした。DP配列とその遷移を全部プリントし,手動でDPした結果と照合,合っていない箇所が見つかれば特定して,条件を書き換えたり追加したり削除したり。これが文字通り無限に続きました。無限という言葉はこのためにあるのだとまで思いました。

何のためにあるんだよと思っていた蛍光ペンの力を借りながら,DPの遷移を1つ1つ追っていき,やっとサンプルが全てあったのが2時間後。祈りを込めて提出しますが,願い届かずWA。この辺でさすがに我慢の限界を迎え,机上の紙をぐしゃぐしゃにするという醜態を晒してしまいました。すでに数十枚のデバッグ出力が溜まっていて,どれが最新のかわからなくなっていたので一回リセットしようという意図だったのですが,振り返るとさすがに度が過ぎたと猛省しています。二人になだめられつつ,気を静めて,印刷したコードとデバッグ出力を眺めます。kikutanさん曰く,ここが今大会のハイライトだったようです。

このあたりですでに4時間半が経過しており,裏ではk1suxuさんが,kikutanさんと詰めたIとJをどっちも1ペナの末に通し切っていて,素晴らしすぎるとなっていました。Iではk1suxuさんが無限場合分けを筋力で通し切り,Jではkikutanさんが天才をしてそれをk1suxuさんが詰めるという流れだったようでした。

途中でC問題にk1suxuさんが着手していて,円環でなければ見たことある典型だと言っていたのですが,細かいところを忘れてしまったらしく苦戦していました。横目で見ながら,最小値で切り開くとよさそうという嘘を投げましたが,すぐに嘘だと指摘されて進展はありませんでした。

一方こっちはというと,kikutanさんに落ちそうなケースを手で作ってもらって,自分は確かにそれで落ちることを確認した後,また無限デバッグ編が開始しました。しかしここで唐突に,k1suxuさんが「タイルは隣接するマスに1回しか動かせない」のではないか,と誤読を指摘しました。絶望のあまりタイピングする手が震えましたが,さすがに今更すぎるので,奇跡的に同じ問題になっていることを信じて合わせようとします。しかし,落ちていたケースすら全く合わせることができず,終了直前にほとんど変わっていないコードを投げました。

ジャッジステータスは見るまでもなく,コンテストが終了しました。

解説 Yes/No

終了後,お昼ご飯を食べる間もなく上の階に行かされました。A問題の解説を聞くと,自分は全く見当違いのことをやっていたようで,どうやら「自明な上界/下界が実は達成可能」というやつだったようです。DP以外の方針が全く思いついていたので,実力不足を思い知らされました。別途あがっていたPDFの解説を見ると,DPでも通せるが実装が煩雑と書いてあって,公式が煩雑というくらいだから実際はかなり煩雑で通し切れるはずもなく,はずれ方針に時間を浪費してしまったと落胆しました。k1suxuさんは僕にAを割り当てたのを悔いていましたが,結局k1suxuさんがDP方針で詰め切ったとしても,Iの無限場合分けは僕では通しきれなかっただろうという合意がとれました。ということでA問題を想定解通りに解く他ないのでありますが,DPが最初に思いついてしまいかつそれが実現可能であるように思えたので,そこから舵を切って全く別の方針を取るのはかなり難しかったのではないかと結論付け,一旦の反省会は終了となりました。

Yes/Noでは凍結されていたAとJが解凍され,JのみACで最終5完ペナルティ750となり23位でした。

最終5完23位

一方で上位争いはというと,嶺上が凍結された問題をすべて通してかつストゼロが凍結後0完でないと,1位が入れ替わらないというシビアな展開に。結局のところ嶺上は凍結後1完,惜しくも2位で,ストゼロが優勝となり閉幕しました。

懇親会

k1suxuさんの顔が広く,いろいろな人に声をかけたりかけられたりしているのを見て感服しました。その中でA問題の話になり,A問題をDPで通したと言っているチームを複数観測し,自分の筋力不足を痛感しました。また,DPでなくともマンハッタン距離に注目して貪欲のようなもので通ったというチームもあり,自分の視野が狭かったなと再度思い知らされました。

また,去年の夏合宿でお世話になったtriCの方に声をかけていただきました。コンテスト中の問題を語りつつ,タイブレークの話になりました。うちのチームは5完ペナルティ750で23位だったのですが,同じく5完ペナルティ750のチームがあって,そのチームは22位になっているようです。さらに,4完ペナルティ508のチームも2つあって,34位がtriC,33位が別のチームだったようです。タイブレークはどうなっているんだといろいろ言い合いましたが,結局最後に解いた問題の提出時刻とかじゃないかと僕が言って,落ち着いた記憶があります。

その後,スポンサーブースを巡ってお腹いっぱいになったので帰ろうとしたとき,triCが地べたに座ってスマホコーディングしているのを発見しました。kikutanさんも話し足りなかったと言っていたので声をかけると,ある企業がパズルのような問題を出していて,それを正攻法で解かずに全探索で解を求めようとしているところでした。バグっているようだったので,コードを見て修正箇所を一緒に考えていました。やっとコードが修正し終わって答えが求まったようでしたが,残念ながら景品は寸前で売り切れてしまったようで,不憫に思いました。

さあいよいよ帰ろうとなったとき,入口の方でキーボードを配っているのが目に入り,思わず目を疑いました。近寄ると,本当に早い者勝ちでキーボードを配っているらしく,訳も分からず実感がわかないまま,ありがたく受け取りました。まさに僥倖。どうやら買い替えの時期だったようで,思わぬ収穫に小躍りしていました。おそらく今大会中に起こった最も嬉しい出来事はこれです。

打ち上げ

せっかく横浜に来たなら中華街でしょということで,歩いて中華街まで繰り出しました。

中華街で有名な門

kikutanさん曰く,中華街はかなりガチャ要素が強いようで,なんとなく目を引いた店に入るのは危険とのこと。kikutanさんに一度行ったことのある店へと案内してもらいましたが,残念ながら営業していないようでした。その後いろいろ調べていくつかの店を見て回ったものの,格式高く見えるところだったり,お客さんが全く入っていなかったりと,入るのが躊躇われるものばかりでした。そうして15分くらい中華街を彷徨っていましたが,少し裏手に入ったところに,そこそこお客さんも入っているいい雰囲気の店を見つけました。どんな結果でも後悔しないと腹を括って入店しました。

メニューは王道の料理から羊や蛙まで,何でもあるといった感じでした。迷った末,各人が麺を1つずつ頼み,韮の点心とよだれ鶏を別途頼んでシェアすることにしました。

スペアリブのような肉が入った麺

一口食べて,勝利を確信しました。本格的な辛さと肉の旨みがスープ全体に染み渡っており,とても美味しかったです。さらに,よだれ鶏がまた絶品で,一般的なチェーン店ではまず出会わないほどに強い花椒の刺激がとても爽快でした。ただ一つ難点があるとすれば,それを口にした後,全ての味が一変してしまうということでした。水を飲みこんでも刺激が舌に残り続け,あれだけ辛かった麺を啜っても,全く辛さを感じなくなっていました。しばらくすると味覚と痛覚が復活していたので,大した問題にはなりませんでした。点心も想像より大きく,総じて満足度が高かったです。

おわりに

チームメイトとはもう5回か6回くらいは練習で5hを走りましたが,その練習も含めてどれもが楽しかったです,本当に感謝です。チームメイトをはじめ,コーチ,懇親会で話しかけてくださった皆さん,大会関係者の方々,本当にありがとうございました。

kikutanさんは今年でラストイヤーだったので惜しくもここで引退となりますが,また新たなメンバーと共にさらなる高みを目指していこうと思います。

来年こそplay off行くぞ!

2025年秋 知らなかった語彙・表現一覧

これは,僕が日常生活の中で初めて出会った語彙・表現などを列挙するものです。文脈や漢字などからある程度意味が推測できるものも載せています。意味に関しては一般的なものよりも,文脈に合った特定のものを書いています。参考程度にとどめて,ご自分で調べることをお勧めします。

9月

語彙・表現 意味など
恵比須顔 恵比須様のような笑顔
好奇の目で見る 未知のものに興味を持って見る
扼殺(やくさつ) 手で首を絞めて殺すこと
痛飲 大量に酒を飲むこと
debunk (嘘を)暴く
調進 目上の人のために特定の品物を作ること
揮毫(きごう) 筆で文字や文章などを書くこと
篤志家(とくしか) 熱心にボランティア活動をする人
インパする in park TDLやUSJに行く
間遮(あいしゃ) (将棋の)合い駒
吉例(きちれい) 良い慣例
足駄(あしだ) 高下駄
お安くない 男女の仲が良いことに対して言う言葉
悪鬼羅刹(あっきらせつ) 極めて悪い人
万難を排して 何としても
業腹(ごうはら) とても腹が立つこと
拙速 出来は良くないが仕事がはやいこと
又候(またぞろ) またしても
無私 私欲がないこと
pillar 柱
天に唾する 他人に害をなそうとしたことが自分に返ってくること
利発な 利口発明 (子供に対して)頭が良い
佳肴(かこう) うまい肴
実力伯仲 互角
リム グラスの縁の口をつける部分
バレッタ おしゃれな髪留め
野面(のづら) 厚顔無恥
訪(おとな)う 訪問する
生中(なまなか)な 中途半端な
職掌 職務
委曲を尽くす 事細かに説明する
愚考する (へりくだって)考える
身共(みども) 私(たち)
木石(ぼくせき) 非情な人
徒長 植物の茎が生長しすぎて細長く間延びすること
車座 大人数が輪になって座ること
かどわかす 誘拐する
濫觴(らんしょう) 始まり 発端
口幅ったい 分不相応に偉そうなことを言う様子
虹の橋を渡る ペットが亡くなることの婉曲表現
tantamount 等しい
糊塗する その場しのぎでごまかす

10月

語彙・表現 意味など
顕彰する 栄誉をたたえて皆に知らしめる
成因 あるものができあがる原因
judicious 賢明な
mandatory 必須の
屎尿(しにょう) 排泄物
ご多分に漏れず 例外ではなく
箱物 自治体が作る公共施設
prolly (口語で)probablyの省略形
パティナ 経年変化による風合い
目抜き通り メインストリート
徒手空拳(としゅくうけん)で 素手で (比喩的に)何も持たずに
符丁 隠語
来意 訪問理由
素寒貧(すかんぴん) 貧しくて何も無いこと
おもはゆい 恥ずかしい
恐悦至極に存じます (目上の人に対して)この上なく嬉しく思います
約(つづ)まるところ 結局は
よすが たより 手がかり

11月

語彙・表現 意味など
間者(かんじゃ) スパイ
鬼子母神(きしもじん)のよう (子供隠された―を略して)大切なものを失って取り乱す様子
もんどり打つ 空中で一回転する
深窓の 世俗から離れて大切に育てられた
奇貨として 良い機会だと思って巧みに利用して
年寄りの冷や水 年寄りが年齢を考えずに無茶なことをする
封切 (新作映画の)公開
一昼夜(いっちゅうや) 丸一日
鼻持ちならない 言動が極めて不快で耐えられない
〜もかくや (〜も斯くやあらむを略して)〜もこうであろうか
後顧の憂い 将来の心配
プロップス (propertiesを略して)芝居や撮影で使う小道具
管を巻く (酔って)ぐだぐだしょうもない話をする
物故者(ぶっこしゃ) 亡くなった人
昏倒 失神して倒れる
邪険にする 冷たくあしらう

JAG夏合宿2025 参加記

はじめに

今年のJAG夏合宿は,国内予選と同じチームK1NTOKIのメンバーで参加しました。

  • k1suxuさん:高度典型が得意
  • toku4388:数学的考察(+実装?と思っていましたが意識しすぎないようにしました)が得意
  • キクタンさん:天才ひらめきが得意

いい感じに得意分野(と苦手分野)が分かれていてとても良いと思っています。

チームの方針としては,Aをキクタンさん,Bを僕が見て,それ以外をk1suxuさんが見るという感じです。ABを通した段階で解かれているor解けそうな問題があれば,適切に振り分けて実装するという流れです。

day1

コンテスト

B

コンテスト開始直後,予定通りまずBを見ました。直感的にソートが最善だとは思いましたが,証明がなかなか思いつかず。k1suxuさんに相談したらよさそうみたいなことを言われたので,信じて書きました。通ったのでよかったです。

L

Lが早々に解かれていたので,Lから逆順に見ることにしました。k1suxuさん枠を感じたので考察しつつ投げると,商列挙ですとか言われたので,一旦それを受け止めて考察を続けます。

A

その裏で,A問題にキクタンさんが苦戦しているのを観測します。提出してWAが返ってきたものの,その理由が良く分かっていないらしいです。k1suxuさんも加わって原因を特定していました。2人がかりでも解き切れていないようだったので,首を突っ込んでみると「問題概要は聞かないで一人で問題を読んでみてください」と言われました。誤読の可能性が高いため確かに有効な方策だと納得したので,落ち着いて読みます。読み終わって解法を伝えた結果,キクタンさんは(3, 3)と(3, 3)みたいなまったく同じペアを数え忘れており,k1suxuさんはidenticalを「異なる」という意味でとっていたようです。僕もidenticalの意味にはあまり自信がなかったので持ち込んだ英和辞典を参照して,「等しい」という意味であることを確認しました。意味を見てから,ああ確かにidentity mapで恒等写像とかidentityで自己同一性とか言いますねと腑に落ちました。意味が明確になったのでそれを整理してAC。

F

次に,Fがほとんどやるだけだとk1suxuさんに言われたので,問題と解法を聞いて確かによさそうと言いました。しかし,問題が簡単すぎたので何かおかしいと思って問題文を一人で読んでみます。すると, S_{(i-1)\bmod N}の iは頂点番号ではなく,実は今までの操作回数であったことが発覚しました。これを伝えて考察しなおすと,結局LCAに行って偶奇のいい感じのところで待機を繰り返すとよいという結論になったので,実装を任せました。途中,Sを最初に2倍にすると偶奇性のところで何も考えなくてよいと言う係をして,AC。

L

さて,Lに戻って解法を考えます。k1suxuさん曰く,商列挙を2回やっても,調和級数的に考えて全体 O(\sqrt{N}\log{N})とかで抑えられているのではないかとのことでした。直感的にそんな気がしたので,実装をお願いします。程なくして書き終わって提出してみたところ,TLEだったとのこと。最大ケースを手元で実行してみるとかなり時間がかかっているようです。ここで,k1suxuさんがメモ化すれば行けそうと主張したので,どこをどうメモ化するのか良く分かりませんでしたが任せてみます。すると,最大ケースが3secほどで終了しているのを観測しました。TL4secなので通るだろうと思って投げますが,またもTLE。そこで,テストケースはrand(1e8, 1e9)を100回みたいな方が実行時間がかかるんじゃないかと提案してやってもらうと,これが4secくらい(あまり正確な秒数は覚えていません)かかっていました。その後k1suxuさんがいろいろ工夫して提出してTLEを重ねながら,何回か提出してACを得ていました。何で通ったかは良く分からないとのことでした。

G

Gがある程度解かれていたので,キクタンさんと2人で考えていました。直感的には左下 (H-1)\times(W-1)マスは好きな色に塗れそうということは分かりました。ここで,前回のARC205Bを思い出して,実は操作に対して不変量があるのではないかと考察をすると,斜めに見たときの白の個数の偶奇が操作回数の偶奇により不変であることに気付きます。これに気付きさえすれば,あとは01列に対する区間XORと全体の0の個数が取得できればよいので,遅延セグ木で解けそうです。具体的なデータをどう載せるかについては良く分からなかったので,k1suxuさんに頭を下げて,写経とともにやってもらいました。最初の白の個数を数えるのが少し大変でしたが,無事AC。

E

E問題は,良い感じにグラフを構築できればあとはやるだけであるということまではk1suxuさんが考察していました。ただグラフの構築が大変で,途中で球面上にある円の包含関係をどうすればいいですかと尋ねられたので,ベクトルの内積とかをこんな感じで使うとたぶんいけますと図と式を描きながら返しました。その後もk1suxuさんは実装を続けていましたが,WAで最終的に通し切ることはできませんでした。

D

最後に2人はD問題に取り組んで,それらしき解法が生えたそうです。実装して愚直と比較するランダムテストを回すも, S+S+cというパターンでのみ(必要十分かは知りません)WAで落ちてしまうことを発見しました。しかし残り時間も僅かだったので,こんな変なケース入ってないだろ!wと提出すると,なんとACが返ってきたそうです。

6完11位でした。

day1結果

コンテスト後

この日の夜に関してはちょっと用事があったので,解説が始まったくらいのタイミングで帰ってきました。E問題以降がどうなったかを知ったのはその後です。

悪くない成績でしたが,欲を言えばEを通しきってあと1完欲しかったです。

Lについては,どうやら計算量解析が間違っていたらしく,eightくんが O(N^{3/4})であることを示してくれたそうです。額面 100 \times (10^{9})^{3/4} = 10^{8.75}ですから,TL4secとはいえ相当厳しいですね。計算量解析についてはおそらくですが,

 \displaystyle
\sum_{i=1}^\sqrt{N} \sqrt{\frac{N}{i}} \approx \int_1^\sqrt{N} \sqrt{\frac{N}{x}} dx = O(N^{3/4})

とかでよいかと思います。調和級数がlogになるのは, x^{-1}の積分が出てくるのがポイントであったことを考えれば,確かにという感じです。少し自分が早合点しすぎてしまったと思います。

お楽しみコンテスト

今年はコンテストがない時間に取り組むコンテンツとして,お楽しみコンテストが用意されていました。問題は全体的にCTFっぽい感じでした。

僕はwelcome以外はロリハのハッシュ衝突2問が解けました。解けたと言っても,Rolling Hashを殺す話 | PDFにすべてが書いてあったので,これを実装しただけです。こないだ苦労しながらSageMathを入れた甲斐がありました。

Good Numberはジャッジステータスや実行時間でテストケース特定を考えましたが,ジャッジがあまり安定していなかったのと最大実行時間しか表示されなかったので諦めてしまいました。

ABC

土曜日につきABCがありました。結果は惨敗。F問題のメビウス変換というやつは,名前だけなんとなく聞いたことあるけど何やってるかは全く知らないシリーズでした。ただ,種類ごとにまとめ上げたあと適切な二項係数をかけるという方針でも解けるらしく,単純な実力不足を痛感させられました。

翌朝,k1suxuさんにメビウス変換を教えてもらい,n次元超立方体の00...0に絵の具の塊を置いて,スライドさせながら全部の頂点をちょうど一回ずつ塗っていくイメージを得ました。次に出会ったときには解けるようになっていたいです。

day2

コンテスト

B

B問題はDPやるだけと書いてあるのでそれをします。爆速で実装が終わって9分でAC。FAが7分だったので惜しかったです。

この時点でAB以外のACが出ていなかったので,Lから見ていきました。Lが激ヤバドミノ敷き詰めパズル,Kがデータ構造構築っぽい何か,Jがたのしいパズル,Iが01 on Treeの進化版で,Kが若干可能に見えるものの,すぐ解けるものは見つかりませんでした。

A

A問題を横目で見ると,2人で考えていましたがかなり苦戦している様子でした。問題を聞いて,「外積0かつ内積負です」という係をしました。それをキクタンさんが実装してAC。

ここ再び順位表に目をやりますが,AB以外の問題をどのチームも通していないという異常事態に。どの問題を解くか決めあぐねていると,FGJKにFAが出てこれらに着手することが決まりました。

F

Fは僕が,Gはk1suxuさんが見ます。FはARC071Cを見たことがあったので, (0の個数) - (1の個数) \bmod 3が不変量になっていることにはすぐ気づきました。k1suxuさんから,swapが必要になることはほとんどなく,必要になったとしても1010...のパターンで1回のみであろうという大胆予想を告げられました。前述の不変量から最終的にどの文字列になるかは分かりますから,mod 3でいい感じに累積和をもって,後から0xAA...をXORしてRLEしてswap必要分を計上すればよさそうです。難易度的にもちょうどいいだろうというメタ読みをして,信じて実装に取り掛かりました。実装している間にキクタンさんがなんとなくの証明をしてくれたので,ある程度の自信をもって書き切りました。提出した直後に \bmod 998244353という文字列が目に入って,modを取っていないことに気付き大反省。64bit整数で十分なのでうっかりしていました。本番でこういったミスがないように気を付けていきたいです。mod取ったらちゃんとAC。

直後にk1suxuさんが書いていたGが通りました。

J

さて,一段落したのでみんなでJKLを考えます。Jは結局どちらの角で曲げるかの2通りしかないので,色 iと色 jについて, iの曲げ方0と jの曲げ方1は共存できない,というような条件がたくさん並ぶことになることが分かります。共存できるかどうかの判定は,最初は無限場合分けをしようとしていましたが,k1suxuさんに曲げ方を全探索して線分の交差判定でいけると言われたので,なるほど賢いとなりました。条件の矛盾判定は,UnionFindで何とかなるかと思っていたのですが,実装途中でうまく表現できないことに気付いて立ち止まりました。冷静に考えると,ド・モルガンの法則を上手く使ってやれば, \displaystyle \cdots \land (\lnot (i \land \lnot j)) \land \cdots = \cdots \land (\lnot i \lor j)) \land \cdots と,2-SATの形になります。あとは写経するだけです。

2-SATライブラリを写経しているときに,val[e] ?: dfs(e)という三項演算子の真のときの値を省略する記法に出会いました。その場では良く分からなかったのでそのまま写してACしましたが,気になって後で調べました。するとどうやらGCC拡張でこの記法は認められているらしく,ここではval[e] ? val[e] : dfs(e)のことらしいです*1。0以外の評価値ならそのまま返す,でなければ別の値を返すということができる優れものです。ただし,評価は一度だけしか行われないので注意が必要です(が,これはむしろ嬉しいと思います)。

ここでクイズ

#include <bits/stdc++.h>
using namespace std;
int main() {
    int i = 0;
    vector<int> a = {1, 0, -1};
    cout << (a[i++] ?: a[i]) << endl;
    return 0;
}

は何を出力するでしょうか。

閑話休題。Lを書いていたk1suxuさんと何度か交代しながら,Jを一発で通しました。

K

その後,Kでキクタンさんが,元々の列が長さMを超えてしまえば,操作を逆順に後ろから考えたときに xと M-xに分かれるので,大きいほうだけ分かればよさそうと言いました。解説のHint1とかHint2を開けた気分で膝を打ちました。それは天才すぎませんかとなって,Lを書いていたk1suxuさんも一旦手を止めてそれはとてもよさそうと言うくらい天才でした。stackをN本持って再帰をいい感じにとかやっていたのが馬鹿らしくなるくらい天才でした。バグを生みつつ爆速で実装しましたがWA。見返してみると「元々の列が長さMを超えてしまえば」をちゃんと考慮できていませんでした(それでもサンプルがあってしまうのがいやらしい)。長さMを超えるまでには高々20回とかなので愚直で十分です。これを直してAC。今日は自分の不注意で2ペナしているので悲しいです。

L

あとはLを通し切ることができればかなり嬉しいです。2人で考察は終わっており,

  • 車を遠くへ「ワープ」させるのは明らかに無駄(ワープできるならそこに新しい車を詰めれば終わり)
  • 1マスの車のスライドで空白を上手く移動させ,2マス分隣り合わせたい
  • チェス盤を考えると,別々の色の空白を移動させるべき

これらを踏まえて,マス間に辺をはったグラフを考えて,BFSして経路復元して,swapを繰り返して盤面を構築しているそうです。 すでにこれで1回提出しており,なぜWAなのかが分かっていないとのことでした。僕も実装を眺めますが,特に怪しそうなところは見当たりませんでした。

しばらく進展のない時間が流れていましたが,残り20分の時点で,キクタンさんが車の「回転」に気付きます。

#^.
.v#

は中央の車を45度「回転」させることにより,

#<>
<>#

とできます。これを踏まえてk1suxuさんが斜め移動も許可した辺を追加して実装を頑張りましたが,回転の盤面構築が複雑で,残念ながら間に合わず。

6完10位でした。

day2結果

コンテスト後

k1suxuさんがLの実装をしていましたが,斜め移動もあることを考慮して最初の方から実装し直したらあっさり通ったそうです。考慮漏れに気付いたタイミングが少し遅すぎたと反省。

余談として,実はday1の自己紹介の時点で気付いていたのですが,高校のときの部活の先輩と偶然にも再会しました。文化祭はどうだったとか,かつての人々は今どうしているだとか,久闊を叙すなどしました。

Writer陣予想コンテスト+懇親会

day3のwriter(たち)を予想するコンテストが唐突に始まりました。スタッフの誰か?いやでもわざわざ出題するということは…?とか読み過ぎてどっちが表か分からなくなってきたので,どうせ誰も当てられないだろうということで,その場合の最適解であるところの空集合を提出しました。

懇親会では,双子,実力あるチーム,海外の強い人,LLMなど,議論が白熱しました。中盤になって誰が何点を得たかの情報が公開され,自分が空集合提出バトルに敗北していることを確認し,同時に単独writerであることが確定しました。

懇親会の終盤,過去の問題提供者の情報を精査した参加者によってwriterが特定され,その正体がDispersionさんであることが明かされました。直前までwriterが誰であるか何食わぬ顔で一緒に議論していた人がまさかwriterだとは思わず,とても驚きました。

day3

コンテスト

B

いつものようにBから読み始めます。問題はすぐに理解できましたが,優先度付きキューに入れる O(N)解法しか分からなかったので,k1suxuさんと相談しました。程なくして,使う最大コストでの二分探索でいけると言われ,確かにそれでよさそうだと思いました。ただ,最大値がかぶっているときに面倒なことになりそうで,こういった実装は自分は得意ではないので,k1suxuさんにそのまま投げました。しばらくしてAC。

Aは特にバグらせることなくキクタンさんが通してくれました。

H

順位表を見るとHがありえない速度で通されていたので見ます。0を避けるように余りを取っていくと,集合の要素たちが区間をなすのは分かりましたが,具体的にどうすればよいかはよく分かりませんでした。そこで,day2を思い出して逆順に見ることにします。区間の長さは変わりませんから,最後の一歩手前は \{1,2,\dots,R-L+1\}になるのが理想です。ここから1手ずつ戻していくと,最大値+1を各要素に足していったものが理想ですから,これを基準に与えられた区間を考えればよいです。よって, R-L+1から始めて2倍して1足すを繰り返し,どこでRを超えるかを見ればよいです。以上を実装してAC。

J

Jを考えていた2人に問題を振られたので見てみるとグラフの問題でした。こんなのはオイラー歩道と同じような感じで,入次数とか出次数とかの偶奇か何かだけで決まるのではないかと雑なことを投げました。そのあとk1suxuさんといろいろやり取りをして,弱連結成分ごとに問題を見たとき,

 \displaystyle \max\left(\frac{1}{2}\sum_{v\in V}\left|\operatorname{deg}^+ v -  \operatorname{deg}^- v \right| ,1\right)

が答えであろうという結論になりました。連結でなくても孤立点が存在するときにオイラー回路が存在する場合があることを知っていた*2ので,k1suxuさんが実装に取り掛かる前に,孤立点だけ例外処理をする必要があることを指摘しました。k1suxuさんが1ペナで通しました。

K

次に爆速で通されていたKを見るとゲーム理論でした。局面が [l,r]の2次元で表されることはすぐに分かったので,2次元平面にプロットして \mathcal{P}局面と \mathcal{N}局面を分けていきます。終了局面が階段状になることにはすぐ気づいたので,これをもとに局面 [1,N] がどちらなのかを判定したいです。しかし,いつまでたっても規則性が分からず,データ構造などで高速に計算する方法も分かりませんでした。キクタンさんもたくさん手で実験していましたが,その規則性をつかんではいませんでした。

F

Kが全く分からないのでFにうつります。かの有名なAntsを題材とした問題で,各蟻の衝突回数aが与えられているので,それが達成可能か,可能であればその初期の向きを出力せよという問題です。最初の方は,k1suxuさんと一緒に蟻の衝突を頭で考えていましたが,ミスも多く全く見通しが立たなかったので,とりあえずダイヤグラムを書いてみることにしました。

ダイヤグラム
黒い半直線の上に重なっている紫や青の線が,個々の蟻の動きを表しています。 すると,蟻 i は蟻 i-1 か蟻 i+1 としか衝突しないことが分かり(考えみると当たり前),個々の蟻の衝突回数を見るよりも,蟻 i と蟻 i+1 の衝突回数 d_i を見た方がよさそうだなとなりました。 dは, d_1 = a_1, \; d_{i+1} = a_{i+1} - d_i から簡単に計算できます。この時点である d_i が負になったり d_n \neq 0 だったら論外です。

このままの図では dとして数えるべき箇所が斜めになっている箇所もあって数えにくいので,思い切って半直線を直線にしたうえで,線の間隔を等間隔にしてみます。すると,以下のようになります。

線を等間隔にした図

これに伴い,x軸が曲がってしまいましたが,適切に直線の間隔を調整することによりいつでも戻れるので気にしないことにします。

さて,これにより大幅に問題が単純になりました。使うLの個数とRの個数を決めてしまうと,

  •  L本のまっすぐな糸と R本のまっすぐな糸からなる,交点を L\times R個持つ網を作り,45度傾けて置く
  • 上から i番目の段には,右から d_i個の交点すべてに印をつける
  • 印がついた交点とついていない交点を分断するように,上から刀で「まっすぐ」(各糸についてちょうど1回ずつ切るように)カットすることができるか?

という問題になります。カットできたとすると,刀がLとRどちらの糸を切ったかを上から並べれば,それがそのまま答えになっています。

以上のことをよく観察すると,網が折れるまでの「前半」の段(上から 1段目から L段目)と,折れてからの「後半」の段(上から L段目から L+R-1段目)について,

  • 前半の段では d_{i+1} - d_iは 0か 1しか許されない
  • 後半の段では d_{i+1} - d_iは 0か -1しか許されない

逆に,この条件を満たしていれば,上から刀でまっすぐ切れることが分かります。

ここまでくれば後は簡単で, d_{i+1} - d_iを見て適切に L(および R)を決めた上で,

  •  d_iにより,右詰めで印をつけていく
  • 右下から見てまとめて計上した印の個数(図の黄色の s)を数える(imos法などで高速にできる)
  •  sを見て刀の動きを決定し,答えにする

とすればよいです。

以上を実装して,1REの末にAC。

前に0が連続するときは最初に省いてから以上のアルゴリズムをやるというようにしていたのですが,assert(ans.size() == n); と書いてしまったのがまずかったです。先頭に連続する0を省いてnが変わっているにもかかわらず,そのままassertをしてしまいました。ただ結局これ以外にもバグっている箇所を見つけられたので結果的には良かったです。

assertつけて提出するのは,バグ発見においてとても効果的ですが,嘘のassertをしないようにだけ気を付けようと思いました。

K

最後に残ったKを考え続けます。ほとんど全チームが通しているので,実はめちゃくちゃ簡単なんじゃないかと,Bの位置の偶奇とかMの偶奇とかでごちゃごちゃ実験をしてみますが,全く合わず。グランディ数を考えると0,1,2しかないのか,いやこれは任意の局面Gに対して |\{ G' \mid G \to G' \}| \le 2なんだから \mathcal{G}(G) = \operatorname{mex}(\{\mathcal{G}(G') \mid G \to G' \}) \le 2で当たり前じゃんとかやっていました。2次元平面上で考える当初の解法も再検討してみますが, \Theta(N^{2})から全く落ちません。結局K問題を解くことはできませんでした。

6完16位でした。

day3結果

コンテスト後

Kは2次元平面上の方針で合っていたようです。ただ,斜めで同じになることにはまったく気づきませんでした。こういうのは気づかないときは本当に気付かないものだと実感しました。

Fがここ1年で解いた問題の中で一番面白かったと言えるくらいいい問題だったので,チームメイトと後輩にこの感動を共有するなどしていました(そのため本記事でも,このFのパートが一番長いです)。とにかくとても気持ちのいい問題でした。

おわりに

開催にあたり準備してくださったスタッフのみなさん,交流してくださった参加者のみなさん,本当にありがとうございました。Yokohamaでは良い結果を残せるように日々精進していきます!