2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

競プロ初心者が少ないrated参加で入茶した話

Posted at

※この記事は競プロ初心者によるものなのでアドバイスはあまり参考になりません。

スクリーンショット 2025-10-12 145236.png
私はこの期間ほとんど勉強せずに7回のrated参加で入茶しました。

競技プログラミングを始めたきっかけ

同じ学校の友達がJOIっていうのを紹介してくれて、JOI2024/2025に参加してみようと思いました。
学校でpythonの授業があった以外にほとんど何も勉強していなかったけれども、1次予選は簡単に突発できてしまいました。分からないことがあってもその度にネット検索の力でカバーしていました。
そのときに身につけたソースコードがこちらです

基本中の基本
A,B=map(int,input().split())

ABCは入出力のソースコードさえかけたらA,Bの問題は解けます。

2次予選が山場だと聞いたので、『「アルゴリズム×数学」が基礎からしっかり身につく本』を買って問題演習しました。(今思えば、入茶できた最大の理由はこれです)
本にのっている問題は、以下のサイトでテストできます。
https://atcoder.jp/contests/math-and-algorithm
https://github.com/E869120/math-algorithm-book

私は2次予選に向けて動的計画法を重点的に勉強しました。これにはいい副産物がありました。私は数学オリンピックにも精通しているのですが、動的計画法の考え方によって解ける数学の問題が増えました。また、線形代数の知識を身につけるのにも競技プログラミングが役立ちました。

理論①
競技プログラミングを勉強すると競技数学に役立つ

しかし、私はJOI2次予選に落ちました。例年より問題が難化しているのにも関わらずボーダーが上昇しているという異常事態でした。高校生の競技プログラミングがレッドオーシャンになっているので今の高校生が新規参入するハードルは高いです。しかしこれは、界隈が盛り上がっているとも捉えられます。競技プログラミングが面白いという事実は不変だから、より多くの高校生が競技プログラミングをやってみて欲しいです。

再び競技プログラミングを始めたきっかけ

JOI2次予選の後5か月が経過しました。5/24の夜が暇だったので再び競技プログラミングを始めました。ABCでA~Cが解けてわーいって感じです。それ以降も暇な夜はABCに参加するようになりました。とはいっても精進は一切しませんでした。

初めのうちはA,B,C,,,と順番に解いていましたが、「数学だけで解けるG問題が出たらしい」という噂を聞いたので、全ての問題に目を通すようになりました。私は数学が得意なので、積極的に数学系の問題に挑戦しました。(それが例え橙diffであっても)

2つの事件

事件① ABC426(6回目のrated参加)
rated6回目にも関わらず、E問題が解けてしましました。
問題文を見た瞬間に解法が思いついたのです。
https://atcoder.jp/contests/abc426/tasks/abc426_e
高橋と青木の座標は、時刻tを用いてx=At+B,y=Ct+Dの形で表せます。
高橋と青木の距離の2乗はtの2次になるので、その最小値は数1の知識を用いて値を出せます。模範解答ではベクトルの話が長々と語られているが、このように簡単に求まるのです。
(実際には5通りで場合分けしているので、少し面倒です)
E問題が解けたおかげで、パフォーマンスは緑になり、レートがグンと上がりました。

理論②
数学が得意な人はAtcoderで圧倒的に有利である。

事件② ABC427(7回目のrated参加)
初めて4完しました。
C問題は過去のABCに似た問題があったのですぐにACできました。
D問題はゲーム理論に関する問題で、私は見た瞬間に解法を思い付きました。二人零和有限確定完全情報ゲームは後退解析で解けるという知識があれば、DPを用いるのは自然な発想です。
https://atcoder.jp/contests/abc427/tasks/abc427_d
私が用いた解法は模範解答の通りでした。
パフォーマンスは1000を超え、入茶しました。無事、初心者卒業です。

理論③ 解く順番
①A,Bを解く
②全ての問題に目を通して、「絶対解ける」と思った問題のうち最も点数の高い問題を解く。
(この思考回路で、E問題を先にときました)
「絶対解ける」が無ければC問題を解く。
③残り時間に応じて、解けそうな問題を解く

これからの作戦は、A~Cと、E~Gのうちどれか1つ解くことです。A~Dを解く人がボリュームゾーンだから、A~Cと、E~Gのうちどれか1つ解けたらパフォーマンスがすごく高くなります。いつも前から順番に解く人は、この記事を読んで、「どうすればボリュームゾーンを抜けるか」を考え、柔軟に解く順番を変えられるようになるといいと思います。

私の長所は、はっきりとした強い分野(数学、ゲーム理論など)があることです。これによって、難易度の高い問題を解いてレートをブチ上げられます。

理論④
得意分野がない人は、まず、1つ得意分野を作ろう。

一方で、私はほとんど精進していないので、ACは安定はしません。得意分野が無ければレートはあまり上がりません。この弱点を克服するために過去問をたくさん解いて基礎的なアルゴリズムを固め、安定して高いパフォーマンスを出せるようにします。今年のJOI2次予選に挑むための万全の体制を整えます。

私はJOIまでに入緑するのが目標です。これは、今のパフォーマンスを安定させられたら必ず達成できます。行く行くは入水、入青も実現します。それは、自身が構築した理論を証明するためでもあります。
現在私は「プログラミング初級者なのに理論唱えてる調子乗ったヤツ」だから、実力を高め、より大きな声で「この色の人はこうやったらレート上がるよ!」って言える人(=より権威がある人)になることを志します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?