競プロのすゝめ
目次
この記事はKogakuin Univ Advent Calendar 2019 - Adventar8日目です。 記事を丁寧丁寧丁寧に作成していたところ、時が過ぎていました。 気を取り直して記事を書いていきます。今回は競プロのすゝめということで、僕のTwitterを見てる方ならお気づきの方も多いと思います。 そうです、競プロはいいぞという記事となります。 安心&安全のWikipediaで見てみましょう 競技プログラミング(英語: Competitive programming、略称: 競プロ)とは、プログラミングコンテストで行われる競技の一種である。 競技プログラミングでは、参加者全員に同一の課題が出題され、より早く与えられた要求を満足するプログラムを正確に記述することを競う。 情報学部の1年生には、新入生のつどいの際に紹介させていただいたので、覚えてる人もいるかな...? 簡単に言うと、プログラミングの授業の課題の発展版です。 2年次に受講できる「離散数学」や「アルゴリズムとデータ構造」を履修した人なら面白いと感じるかもしれません。感じるよね??? ここではリンクを貼るだけに留めておきます。 初心者の方にはAtCoderとAIZU ONLINE JUDGE(通称:AOJ)がおすすめかな。 先程紹介したAtCoder社が開催するコンテストでは、時々(文章が)面白い問題が出題されます。面白いからといって舐めてかかると顔面に右ストレートを喰らいますが... 実際に問題文を見ていきましょう 高橋君*1は、日頃の感謝を込めて、お母さんに数列をプレゼントすることにしました。 お母さんにプレゼントする数列 は、以下の条件を満たす必要があります。 高橋君がお母さんにプレゼントできる数列の長さの最大値を求めてください。 日頃の感謝を込めて母親に数列をプレゼントするなんて... 普通の家庭ならサイコ扱いされてもおかしくないですよね(笑) お金はかからないので最後の手段としてはアリかもしれない???? すぬけくん*2はカードゲームで遊ぶことにしました。 枚からなるカードの山があり、上から 枚目のカードには整数 が書かれています。 すぬけくんはこのカードの山に対し 回以上、以下の操作を行い、残ったカードに書かれた値が互いに異なるようにしたいです。最大で何枚のカードを残すことが可能か求めなさい。なお、 は奇数であり、少なくとも 枚のカードを残すことが可能であることが保証されます。 操作:カードの山から任意の 枚のカードを抜き出す。抜き出したカードのうち書かれた値が最大であるようなカード 枚と最小であるようなカード 枚の合計 枚を選んで食べる。その後残った 枚をカードの山に戻す。 一見まともな問題のように思えますが、操作をみるt、、、 口からトランプを出す人*3ならたくさん見てきましたが、カードを食べる人は見たことがないですね。逆再生であることを祈るばかりです。 高橋君の通っている学校で大掃除が行われることになりました.学校には 個の教室があり,各教室は から まで順番に番号付けられており,左から右に並んでいます. 高橋君の学校には高橋君を含め 人の生徒がおり,掃除すべき連続した教室の区間(掃除区間と呼ぶ)は 個既に決まっています.しかし,それらの掃除区間を誰が担当するかは決まっていません. 異なる生徒には異なる掃除区間が割り当てられ,割り当てられた生徒はそれに含まれる全ての教室を掃除しなければなりません. つの教室が複数の掃除区間に含まれることがあります. 高橋君は大掃除の日に女の子とのデートの約束をしていることに気づきました.デートをサボってしまうと何が起こるか分からないので大掃除をサボることに決めました. 前述の通りいくつかの教室については複数の掃除区間に含まれていることがあるので,高橋君の担当分をサボっても全ての教室を誰かが掃除してくれさえすれば,サボったことがバレないことに気づきました. 掃除されていない教室があった場合には,サボったことがバレます. あなたの仕事は高橋君のために,サボってもバレない掃除区間を全て教えてあげることです. なお,この学校の生徒は高橋君を除きみんな真面目なので,高橋君以外がサボることは無いと仮定してください. デートのために大掃除をサボるとは漢の鑑ですね(泣) AtCoderでは、このように模範となる人の行動が問題として出題されることがあります。問題を解くだけで、人としてもプログラマとしても成長できるとはお得ですね(?) 腕力に自身があると、塀を壊して進むっていう発想が出てくるんですね... 僕もリングフィットアドベンチャー*4 で上腕二頭筋を鍛えて、講義に遅刻しそうな時に壁を壊していけるようになりたいです 他にも面白い問題はたくさんあります!興味があったらこのサイトに飛んでみると幸せになれるかも?(上記の問題はこのサイトの一部を選んで紹介させていただきました) さて、先程の問題をみて「解けねぇよ...」と思った方もいらっしゃるでしょう(私もそうでした) 何事もそうですが、触れたことのない分野の内容は実際の難易度よりはるかに高く感じてしまうものです。 ん?楽に解けてしまった???*5 では本題の競プロ入門についてお話していきます。 先程色々なサイトを紹介しましたが、結論から言うとAtCoderで問題を解いてみるのがおすすめです。 主な理由としましては などなど、他のコンテストでは(あまり)無い特徴が多く、初学者にはおすすめのポイントがたくさんあります。 特にUI面は本当に重要だと思います。コンテストまで辿り着けなければ元も子もないですからね。あれ?そういえば、ついこの間UIが変わる前まで、、、だったところがあったような無かったような 競プロを始めるにしても、何からやったらいいか迷いますよね。 そこで僕もよくお世話になっているけんちょんさんの記事を紹介します。 初学者に対する(もちろん上級者向けも)記事を丁寧に書いてくださっていて本当に尊敬してます。すごいですよね。 ちなみにこの記事が好評なことから、ここで選出されている問題がそのままコンテストになっています。 これらの問題が解けるレベルになれば 、コンテストに参加してみてもいいんじゃないかなと思います。(解かずにいきなりコンテスト参加も悪いとは言いませんが、オススメはしません) いかがでしたか?少しでも競プロに興味を持っていただけたならば幸いです。 これを機に参加してださる方は、はじめの頃はレートなんて気にせず、週1のちょこっとした趣味として気軽に参加してみるのがいいと思います。#月刊競プロは役に立たない 等の意見をお持ちの方もいらっしゃると思いますが、年々参加者が増加してますし(今年の増加率はやばかったな、、、)やっておいて損するものでは無いと思います。 また、分からない問題や、聞きたいこと等ございましたら、私とか メンバーに聞いていただければ(できる範囲で)お答えできると思うので、遠慮せずバシバシ聞いてください。(そのままKogCoderに入って♡) 次回の記事は、面白い問題から1問選んで解説するものになると思います。また丁寧に書いて時空を歪めてしまうかも それでは、某学院大学に競プロ勢が増えることを願ってこの記事を終わりとさせていただきます。 最後までご覧いただきまして、ありがとうございました。はじめに
競プロとは...
競プロができるサイト
面白い問題
Mulitple GIft
Card Eater
ドキドキデート大作戦高橋君
器物破損!高橋君
彼の住む街は長方形の形をしており、格子状の区画に区切られています。区画は道または塀のどちらかであり、高橋君は道を東西南北に移動できますが斜めには移動できません。また、塀の区画は通ることができません。高橋君の家から魚屋までの道のりは非常に複雑なため、単純に歩くだけでは辿り着くことは困難です。
しかし、高橋君は腕力には自信があるので道に上下左右で面している塀を 回までなら壊して道にすることができます。
高橋君が魚屋に辿り着くことができるかどうか答えてください。競プロ入門
おすすめの問題
さいごに