NITMC24sに向けた競プロ入門

はじめに

はじめまして。松江高専情報工学科5年生です。

24sJ科(24年度入学)のみなさん、入学おめでとう!

 

皆さん、情報工学科と言えばプログラミング!ということで入学してくれたと思います。

プログラミングは入学してすぐのやる気があるうちに始めるのが良いです。だけど何も作りたいものがない...という人がいると思います。

そこで今回はそんな人に向けて競技プログラミング(競プロ)を紹介します。

 

競技プログラミングって何?

競技プログラミング(以下競プロ)は与えられた課題を参加者がプログラミングで解決する競技のことです。

問題に対して考察を行い、その考察に沿って素早くプログラムを記述する速度を競うものです。

 

競プロのいいところと悪いところ

いいところ
  • 成長が分かりやすい

成長が分かりやすいことです。レートが伸びたり、解けなかった問題が解けたり...成長を感じることができるとやる気も上がります。

  • 友達と競い合える、高め合える

友達と一緒にやると、レートで競ったり一緒に大会に出たりできます。実際、チーム戦の大会が何個かあります。(おまけで紹介しています)

  • 就職に強くなれる

競プロをやっているとレートで自分がどこまでプログラミングができるのかのある程度の指標になります。一種の資格のようなものです。面接でも話の種になると思います。

悪いところ
  • 難しい

皆さんのイメージ通り、競プロは難しいです。ただ、全部が難しいというわけではなく、簡単な問題もあります。ですので、最初から難しい問題をするのではなく簡単な問題から順々に解いていくのがいいでしょう。

 

 

競プロをおすすめをする理由

私は2年生のころにJOI,4年生にICPCに参加しました。そこから競技プログラミングに興味を持ち毎週土曜日のコンテストに参加をしています。

JOIは2年生までしか出ることができず、リベンジができませんでした。1年生から競プロを知っていれば2回出ることができてリベンジもできたかもしれません。

はじめにの部分で作りたいものがない人向けにお勧めすると言いました。それは、私自身も作りたいものがなかったからです。プログラミングをしない期間が空くと腕は衰えますし、いざ作りたいものができた時に作れない。といったことも起きてしまいます。

競プロを始めてからはプログラミングを長期的にしないということはなくなりプログラミング力の維持につながっていると思います。

1年生はこれから5年もあります。今から始めたらきっと卒業するころには前述したように就職で話せる強みになると思っています。

 

 

長々と説明してきましたが、実際にやってみたほうがはやいです。そのうち環境構築のやり方とか出します。

興味があって待てない!っていう人はぜひTwitterのDMで聞いてみたり調べてみてください!!

 

 

(おまけ)競プロの大会

 

  • JOI/JOIG

JOI/JOIGは高校3年生までが参加できる大会です。J科の学生は2年生に授業で参加します。例年9月から翌年の春にかけて行われています。この大会は

1次予選→2次予選→本選

の3段階で分かれています。1次予選は難しくないのですが2次予選、本選はかなり難しいです。1次予選突破、2次予選で点数を取る。までを目標にするといいと思います。

JOIGは女性のみが参加できる大会で、

1次予選→本選

の2段階に分かれています。難易度的にはJOIよりも少し簡単ですが、レベルがめきめきと上がっているイメージがあります。

 

ICPCは大学対抗のプログラミングコンテストです。3人1チームで問題を協力して説きます。世界大会もあり、かなり大きい大会です。

日本大会→アジア(リージョン)大会→世界大会

のようになっています。アジア大会は去年は横浜で開催されました。移動費、宿泊費は運営が出してくれるので実質タダ旅行!(そんなことはない)

 

注意点としてアジア大会からは問題文、大会時の公用語は日本語ではなく英語です。話す分には何とかなりますが問題文がちゃんと英語できないと分からずつらいです。

問題の難易度も大学生向けなので初心者にとっては少し高めですが、アジア大会に出場することができれば、とても良い経験になると思います。世界大会もあり、出ることができれば、多分高専初になるはずです。(世界大会は東大、京大が強いです...裏を返せば東大と戦える)

高専の情報系に入ったならプロコンをやろう!競技部門、自由部門、課題部門の3つに分かれ例年11月にあります。チーム開発の経験や他高専の人や企業の方との交流などメリットはたくさんあります。(企業賞でいいものももらえます)

高専プロコンに興味ある人は私のDMか情報科学研究部の部活の見学に来てね。

他にもいろいろあるのでたくさん出たら楽しいと思います。

 

 

 

 

 

 

競プロで茶色になるまで

 

みなさんこんにちは。Suzuneと申します。

ABC343で茶色コーダーになれました!この記事では茶色になるまでにやってきたことなどを通して、これから競プロを始める人に茶色ってどのくらい頑張ればなれるの?とイメージを持ってもらえればと思います。

目次

 

自己紹介

レート推移はこんな感じです。



茶色の実力

Atcoderでの茶色の実力はAtcoder社 社長のchokudaiさんがご自身のブログで以下のように述べられています。

茶色になる条件は、Ratingが400以上になることです。茶色で保証できる実力ですが、正直、AtCoder内ではあまり高いレベルではありません。ただ、ここにたどり着く前に辞めてしまう人が多いので、十分にやる気がある人であるとは言えるでしょう。

なお、他社転職サイトと比較すると、このレーティングでも上位1~2%の最高ランクに到達出来る人が数割いるため、一般的には十分高いレベルであると言えます。

個人的な印象としては、

  • 情報系の学生が茶色であれば、ちゃんと勉強してるなって印象になる
  • 派遣で来たプログラマAtCoder茶色だったら結構安心する
  • 茶色があればエンジニアとしてアルゴリズム面においての安心感があるかと言われたら、正直物足りない

みたいな印象があります。スキル的に確実に保証出来る点は、

  • 標準入出力、if、forなどの単純な操作はできる
  • 問題文を正しく理解し、計算量を考えない仕様通りの実装をすることが出来る

の2点です。ただし、完全に上の能力しか持っていないと茶色になることはできず、

  • MARCH理系学部以上に入れる程度の数学力や論理的思考力があり、数学的な工夫が必要な問題を正解出来る
  • 典型アルゴリズムに関する知識を多く持ち、探索による全列挙や単純な動的計画法など、典型的な問題に正解することが出来る。
  • コーディングや読解速度が早く、単純な問題を早く正確に実装することが出来る

などの特徴を持っていなければ、茶色になることはできません。このレート帯に達する人は本当にバラバラなので、保証出来る点は少ないですが、何かしらの強みを持っていなければ、茶色に到達することはできません。

もちろん、保証出来る点が少ないと言っても、コーディング試験でおなじみFizzBuzzなんかは全員が当然一瞬で組める水準です。

簡単に言えばプログラミングの基礎はできている。という感じでしょうか。

 

茶色になるまでにやったこと

①ABCに参加

どの練習よりも実際のコンテストに出るのが一番の練習だなと感じます。終わった後にTwitterで流れてくるどうやって解いたか。みたいな他の人のツイートを見るのも参加していると共感できたりして楽しいです。

 

②ABCのA,B埋め

A問題はプログラミングがある程度できるならやらなくてもいいかもしれません。

私の場合はAを解いて行く過程でRubyの便利なメソッドが知れたり、簡単な問題を解くことで「解ける!」という楽しさを維持したかったので解きました。

 

B問題はやるべきです。B問題を解けない人にC問題は解けないと思います。解けたとしても、B問題に時間をかけすぎるとC問題取り組める時間が減るので、できるだけ早く解けるように問題数をこなしました。

B問題をやるうちに言われたとおりに実装する。という力が向上したと思います。

 

③できそうなC問題を解く

やっていてB問題とC問題の間には壁があるなと感じました。

C問題からはB問題と違い、計算量を意識してコーディングをしないと不正解になってしまう問題が多くなってきます。計算量の意識と計算量の落とし方をC問題を解くうちに少し身についたと思います。

C問題を解くうえではアルゴリズムも大事ですが、私は連想配列(Rubyでいうhash)をマスターすることが大事だと感じました。連想配列を使うようになってからコンテストでもC問題まで解けるようになったりしました。

 

④ADTに参加

これは時間があったときに参加していました。実際のコンテストと同じような感じかつ、出題される問題もAABBCでちょうどいい難易度で楽しくコンテストに参加できるのでおすすめです。

 

これから

とりあえずの目標だった茶色にはなれましたが、緑コーダーや水コーダーの人より圧倒的にアルゴリズムの知識、数学的思考が足りていないのでそこを頑張ってつけていきたいです。

具体的にはCの上位diffやD問に埋めていきたいと思います。

 

最後に

AtCoderのコミュニティとか興味あるので招待ください👀