第2話 精進、そして色変
「ふぁ……。もう朝か……。」
どうやら問題を解いている最中にそのまま机で寝落ちしてしまったらしい。凝り固まってしまっている全身を伸ばしながら俺は服を着替え部屋を出た。
競プロが全ての異世界に転生し、辛酸を嘗めることとなった初めてのコンテストから一ヶ月――
俺はおっさんの勧めで主に初心者が集まっているというギルドに身を寄せていた。この世界では信じられないことにレートによって見た目まで変化するようだが、どうやらこのギルドには青以下のレート帯の人間が集まっているようで、日々情報交換やコンテストに向けた特訓が行われているらしい。俺はあの日の屈辱を晴らすため、そしてなにより井の中の蛙だった自分自身を成長させるためにギルドに所属し精進の日々を送っている。
朝食を食べるために食堂へ向かうと、ギルドのマスターであるreiさんがいつものように橙色に発光しながらメンバー達へ声をかけていた。
「あら、ranxt君おはよう!よく眠れたかしら?」
「おはようございます、マスター。本当はもっと問題を解いていたかったんですが寝落ちしてしまって。なかなか解けないのがむず痒いです。」
ranxtというのは俺が元の世界のネットで使っていたハンドルネームだ。どうやらこの世界では俺からするとハンドルネームのような名前が一般的であるようで、なじみのあるこの名前を名乗ることにした。
「ダメよ、ゆっくり眠ることも精進のうち、無理に起きて問題を解いていてもいいことはないわ。」
「はい……。」
(休んでいては奴に追いつくことなんて不可能だ……)
内心あまり納得は出来なかったが今の俺よりはるか格上であるreiさんに口答えすることも出来ず俺はただ頷くことしかできなかった。
「ところで明日のEBCには参加する予定よね?あなたにとって二回目のコンテスト参加だと思うけど何かわからないことある?」
「あ、一つわからないことが。俺が初めて参加したコンテストはグランドコンテストと呼ばれていたんですが今回は何か違うんですか?」
「EBCというのはエットコーダービギナーコンテストの略でグランドコンテストと比べて初心者向けの問題が多く出るのよ。対象者として青レート以下を想定しているわ。黄色以上の人は参加したとしてもレートが変動することがないの。」
(なるほど、前回のEGCで黄色になったおっさんは対象外ということか。)
「わかりました。reiさんが問題を作っているという噂を聞いたんですがそれは本当なんですか?」
「ええ、本当よ。橙レート以上であればEBCの問題を作る権利が得られるの。高レートになるために必要になっていく要素をちりばめておいたわ。全部で6問あるけど初心者なら3問も解ければ凄い方だから頑張ってちょうだいね。」
「いろいろ教えてくれてありがとうございます。頑張ります。」
軽く頭を下げて離れるとreiさんはまた別の人に声をかけに行った。
(青色以下が対象のコンテストということはそう難しい問題は出ないはず。reiさんは3問で十分と言っているがこんなところで躓いてはいられない。今回のコンテストで必ず茶色になって見せる。)
強い決意を胸に俺は食堂の席に着いた。
その後部屋に戻った俺は精進を再開した。だが、ここで問題が発生する。
(modってなんだ……。)
競プロでは高校数学までの範囲で解くことが可能な問題も多く存在する。しかし一方で今まで聞いたことのない知識が要求される問題も多い。前回のEGCのろ問題で出題されたグラフというのもその一つだ。そして今詰まっているmodという概念も。
(あまりをとるというのはわかる。しかし、計算の途中で割り算が出てきた場合に正しい値はどうやって求めればいいんだ?)
「お、もう数え上げの問題に挑戦しているのかい?ずいぶん早いじゃないか」
「krm、いや、問題自体は理解できるんだがmodでの値を求めるというのに詰まっているんだ。割り算するときにどうすればいいのかわからなくてな……。」
krmは緑コーダーの先輩ギルドメンバーだ。俺がギルドを訪れてからなにかと世話を焼いてくれていて、特に競プロで知らない概念をいつも教えてもらっている。
「え、この問題を理解できるなんて凄いな。僕が灰色の頃はこんな問題全く手を付けられなかったよ。modでの値を求めるためにはね、フェルマーの小定理というのが必要なんだ。」
「フェルマーの小定理?」
「うん。足し算や掛け算をするとあまりの値を決めることができるのはわかると思うけど、割り算というのは掛け算の逆の演算だよね。つまり同じ値をかけたときにもとの値となるような値を求めることができればそれが割り算したときの結果なんだ。」
「なるほど。具体的にその値はどうやって求めたらいいんだ?」
「ここで必要になってくるのがフェルマーの小定理なんだよ。これはpを素数としたとき、pと互いに素であるaに対してa ^ (p - 1) ≡ 1 (mod p)が成立するというものなんだ。そしてこれを利用するとa ^ (p - 2)がaの逆元となるわけだ。」
「そういうことか、ありがとうkrm!この問題ではpが10^9+7で普通にp-2乗を求めていたら間に合わないけど、ここは繰り返し二乗法を使えば問題ないな。よくわかったよ!」
新たな知見を得ることが出来て少し興奮気味にkrmにまくしたてると少し困惑した様子を見せた。
「今の説明だけで理解できたのかい?正直これだけでわかるとは思っていなかったんだけど……。それにここまで説明しただけですぐに繰り返し二乗法を使えばいいことまでわかるなんてranxt君、君ってやつは……。」
「あー、いやなんていうか元々数学は好きだったんだ。でもこういったことは全然知らなくて、毎日新しい知識を得られて凄い最近楽しいよ。」
「はぁ、本当に君の吸収力といったらこちらこそ毎日驚かされるばかりだよ。僕なんてすぐに抜いてしまうかもね。」
「そんなすぐには難しいだろ。まあ俺も高いところからの景色を見てみたいんだ、明日のコンテストお互い頑張ろうな。」
「そうだね、僕も負けないように頑張るとするよ。明日のコンテストの時間に合わせてあまり夜更かしはしないようにね、じゃあお休み。」
「ああお休み、いつもありがとな。」
その後いつものように遅くまで問題を解き続け気が付いたら寝落ちしてしまっていたことは言うまでもない。
そして迎えたコンテスト本番直前――
(めちゃくちゃ緊張する……。)
俺がこの世界に来て生まれて初めて屈辱を味わったあの日から一ヶ月。本当に狭い世界しか知らなかった俺がもっと広い世界を知りたいと思いこの一ヶ月精進を続けてきた。その成果がこれからのたった100分で評価されるという事にかつてない緊張を感じていた。
(寝る間を惜しんで問題を解いてきただろ、俺なら出来るはず。)
過去のコンテストに出題された問題を中心に解いてきた、同じ傾向であるならば最初の1、2問はほとんど考える必要のない問題が出題されるはずだ。
(まずはい問題とろ問題で緊張を紛らわせよう。)
深く息を吸い、吐く。紙を広げペンを持つ。そして
(5、4、3、2、1、スタートだ!)
コンテストが始まる。
EBCのい問題はEGCの時と比べるまでもなく簡単な問題だ。足し算を出来るだけで解けるような問題すら出題される。今回のい問題も案の定簡単であった。
(今回のい問題は入力された文字列を2回出力すればいいだけ、こんなの簡単だ!)
開始1分でEBCでの初ACを獲得することが出来た。
(よし、あとはこのまま落ち着いて問題を解いていこう、ろ問題も何も難しいことはないはずだ)
ろ問題はn*mマスのチェス盤に置かれた角が移動可能なマスは何マスあるかという問題だった。
(こんなの簡単だ、基本的には半分のマス目に移動可能で、n*mが奇数であるときだけ適切に気をつければいいだけ……!)
こんなところで躓いているわけにはいかないのだ。焦る気持ちを抑え慎重にタイピングし、サンプルを試して問題ないことだけ確認してさっさと提出する。
(さあ、早く次の問題を解こう。もうあの時の屈辱は味わいたくないんだ)
そう思い次の問題を開こうとした時だった。
――WA
見間違えかと思った。しかしそこには間違いなくWAと二文字が刻まれていた。
(なぜだ?どこに間違える要素がある?考察に間違える要素はないはず、コードにバグが存在したのか?)
条件分岐などをやや複雑に書いてしまったため、もう一度式を綺麗に立て直しコードに落とし込み再度提出を行う。
(これなら間違いないはず……)
しかし、再びそこにはWAが表示されていた。俺はパニックに陥った。
(ろ問題を解けない?俺が?この一ヶ月常に精進を続けてきたのに?なんのための精進だったんだ?落ち着け、よく考えろ。どうせくだらないところでミスをしているだけなんだ)
だが考えても一向にWAの原因はわからず、気が付けばコンテストは1時間が経過していた。俺は絶望の淵に立っていた。
(俺は何も変わっていないのか……こんなところで立ち止まっているわけにはいかないのに。)
いつの間にか落としていたペンを拾おうとしたとき俺は自分の体が震えていることに気付いた。あまりの悔しさに涙さえ出てきそうになったその時、reiさんから言われた言葉が脳裏をよぎった。
「君は数学が得意みたいだし、場合によっては知識が必要とされない高難易度の問題も解けたりすることもあるかもね。」
俺は一縷の望みにかけてすべての問題に目を通すとへ問題が数え上げ問題であることに気付いた。さらに順位表を見るとどうやら今回のコンテストはEBCにしてはかなりの難問がそろっておりみな苦戦していることがわかる。
(これならまだへ問題を通せれば勝機はある……落ち着け……)
深呼吸をして少しずつ冷静さを取り戻していく。震えが収まり俺は問題を読み始めた。
(二次元グリッドにおいて原点からr1 < i < r2かつc1<j<c2を満たす全ての(i,j)までの経路の個数の総和をmod10^9+7で求める問題か。ある一つのi、jであればコンビネーションを使えば解けるが……考えろ……)
ただ愚直にすべてのi、jに対する答えを計算していたのでは明らかに時間が間に合わない。ここで俺はコンビネーションの計算は様々な式変形が可能なことを思い出していた。落ち着いてよく考えてみるとこの式は変形することで十分実行時間以内で答えを求めることが出来そうだ。
(だが、コンテスト残り時間は10分か……頼む、間に合ってくれ!)
全神経をコーディングに集中させる。今までの人生で何かに熱中するという事がなかった俺が初めて寝食を忘れてこの一か月競プロに打ち込んできた。その甲斐もあり手がまるでどう動けばいいかわかっているかのように自然と動いていく。
(よし、これで通るはず、時間は……残り10秒、もうサンプルを試す時間はない、頼む!!)
神にすがる思いで提出ボタンをクリックすると同時にコンテストは終了時間を迎えた。
(結果は……どうなった)
おそるおそる目を開き結果をみるとそこにはACが表示されていた。
(よかった……)
安堵した俺は緊張の糸がそれまで張りつめていたぶん途端に体の力が抜け床に崩れ落ちた。5分ほど半ば放心状態で座りつくしていたがようやく椅子に座りなおし順位表を確認するとそこには予想だにしなかった結果が表示されていた。
(え、青パフォーマンス?俺が?)
最後にへ問題を通すことが出来たものの前半のあまりの出来の悪さにあまり良い結果ではないだろうと思っていた。しかしどうやら順位表を見る限り今回のコンテストはどの問題も非常に難しかったらしく、へ問題を通すことで全体でかなり良い順位をとることが出来ていた。
驚きのあまり硬直していると身に着けているものが緑色へと変色していく。
(なっ……灰色の次は茶色じゃなかったか?俺が今回の結果で緑になっていいのか?)
コンテストの手ごたえと返ってきた結果にギャップがあり、嬉しいもののあまり納得出来ずにいた。
(だが、とりあえず……今はつかれた……)
この一ヶ月の精進の疲労もあり瞬く間に俺の意識は闇に沈んでいった。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます