NITMC24s向け競プロ入門-問題を解いてみよう-

 

環境構築

さっそく問題を解いて行きたい...のですが、まずは環境構築をしましょう。

環境構築はプログラミングに必要な「開発環境」を作成する作業です。農家の人が野菜を作る前に畑を耕すのと同じ感じ(?)だと思ってください。

プログラミングはメモ帳でもできますが、やればやるほど大変になります。なのでプログラミングをサポートをしてくれるテキストエディタを使いましょう。

ここでは人気のエディタのVisual Studio Code を紹介して導入方法を説明します。

 

Visual Studio Code - Code Editing. Redefined

 

WindowsMac,Linuxにも対応しています。世界的にみても利用者が多いです。標準機能が豊富で初心者にとってはありがたい機能も多いです。また、拡張機能も導入できるので必要に応じて導入していってください。

 

他にはVimとかEmacsとかありますが、私が触ったことがあまりないので説明は控えます。気になる人は調べてみてください。

 

上のリンクからVisual Studio Code (VSCode)の公式ページに行ってください。

そのサイトからDownload for Windowsと書いてあるボタンを押してダウンロードしましょう。ダウンロードができたらPCにVSCode~~~Setup~~~.exeファイルがあると思うのでそれを開きましょう。

 

開いたら使用許諾契約書の同意を求められるので同意して次へを押してください(読みたい人は読んで)。他の画面も次へを押して進んでください。追加タスクの選択の画面はお好みでチェックを入れてください。(最初からチェックが入ってるものは外さない)

最後にインストールというボタンが出てくるので押すとインストールは完了です。

VSCodeを開くと最初は英語だと思います。なので日本語にしましょう。

 

VSCodeのデフォルト画面

最初はこんな感じの画面が出るので左側にあるアイコンの上から5番目を押してください。検索欄が出てくると思うのでそこに[Japanese]と入力すると下の画像のような拡張機能が出てくると思うので、インストールしてください。

インストールが終わったらVSCodeを再起動すると日本語になっています!これでVSCodeの環境構築は終わりです!

 

問題を解いてみよう

ようやく問題を解きます...やっとだね!

皆さんに解いてもらう最初の問題は この問題

 

問題文を見て難しいと感じましたか?でも大丈夫。この問題は難しいように見えて入力で与えられるrを2乗して出力してね。という簡単な問題です。

この「入力で与えられるrを2乗して出力してね」をプログラムにすればいいのです。

 

プログラミングをする際のプログラミング言語は何でもいいです。おすすめは下の3つです。回答例も合わせて載せておきます。

おすすめのプログラミング言語
  • C++(一番メジャーで早い,大会もC++以外使えない大会もある)

回答例

C++の答え

 

Python(pypy3)の答え



  • Ruby(松江と言えばRuby 初心者には割とおすすめ)

    Rubyの回答



 

 

 

問題を解く過程は

  1. 問題文を見て頭の中や紙に書いて解法を考える。
  2. その解法をプログラミングをしてコードを作成する
  3. 書いたプログラムがテストケースの答えと同じか確認する
  4. 提出する
  5. 正解だったら次の問題 間違いだったらもう一度1へ

という感じで解いて行きます。

提出をして結果のところにACと出れば正解です!やったね!

 

ここまでできればあとはどんどん問題を解いて強くなっていってください!

 

参考にさせていただいたサイト

Windows への Visual Studio Code のインストール方法

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のコミュニティとか興味あるので招待ください👀