投稿者 NOSS | 2019-04-07
競技プログラミング部がどんな活動をしているのか紹介したいと思います。
興味があってよく知りたいというひとの助けになれれば幸いです。
告知
説明会・体験会を行います!
ぜひ気軽に足をお運びください
- 4 /10 (水) 16:30 中央図書館ワーキングスタジオ 304
- 4 /19 (金) 16:30 中央図書館ワーキングスタジオ 302
目次
競技プログラミングとは?
競技プログラミングとは、プログラミング技術を競うコンテストのことです。
より具体的に言うと、出題された問題に対して答えを求めるプログラムを書き上げる速さ・正確さを競う競技です。
プログラムを実行できる時間には制限があるのでコーディング能力だけでなく効率的なアルゴリズムを選択する能力も必要となります。
コンテストは毎週オンライン上で開催され、その成績によってレートがつきます。
どんな問題を解くの?
問題は数学的な問題からパズル的な問題まで幅広い分野から出題されます。
実際に出題された問題をいくつか紹介したいと思います。
Between Two Integers
https://atcoder.jp/contests/abc061/tasks/abc061_a
-
問題
3つの整数 $A,B,C$ が与えられます。
$C$ が $A$ 以上かつ $B$ 以下であるか判定してください。
条件を満たすならYes
、そうでない場合はNo
を出力します。 -
入力例
1 3 2
- 出力例
Yes
実際にコードを書いてみるとこんな感じになります。
- 解法コード例
#include <iostream>
using namespace std;
int main(){
int a, b, c;
cin >> a >> b >> c;
if(a <= c && c <= b){
cout << "Yes" << endl;
}
else{
cout << "No" << endl;
}
return 0;
}
Minesweeper
https://atcoder.jp/contests/abc075/tasks/abc075_b
-
問題
$H \times W$ のマス目が与えられます。
空きマスは.
爆弾のあるマスは#
で表されます。
各空きマスについて周囲 $8$ マスにある爆弾の個数を求めてください。 -
入力例
4 4
#...
....
.#..
..##
- 出力例
#100
2210
1#32
12##
これはやや難しい問題です。
Five, Five Everywhere
https://atcoder.jp/contests/abc096/tasks/abc096_d
-
問題
以下の条件を満たす長さ $N$ の数列 $a_1,a_2,…,a_N$ を1つ求めてください。
- $a_i (1 \le i \le N)$ は $55555$ 以下の素数である。
- $a_1,a_2,…,a_N$ の値はすべて異なる。
- $a_1,a_2,…,a_N$ からどの異なる $5$ 個の整数を選んでも、この合計は合成数になる。
$N$ は $5$ 以上 $55$ 以下の整数です。
-
出力例
$N=6$ のとき
2 3 5 7 11 13
$N=8$ のとき
2 5 7 13 19 37 67 79
様々なコンテスト
世界最大規模の大学対抗プログラミングコンテストです。3人1組のチーム戦で行います。
部の主な目標の1つはICPCを勝ち抜くことです。
国内最大のプログラミングコンテストを開催しているサイトです。
世界で最も権威のあるコンテストの1つです。4段階の予選があり、すべてを勝ち抜くと World Finals に進出できます。
プログラミングコンテストの楽しさ
- 世界中と対戦
コンテストはオンライン上で開催されるので日本人だけでなく世界中のプログラマーと競うことになります。
コンテスト中はリアルタイムにランキングが更新されるのでゲーム性が強く、その中で難しい問題が解けたときの嬉しさは大きいです。
- 企業コンテストに招待
企業主催のコンテストでは予選通過をすると本戦に招待されることがあります。本戦会場では企業グッズ(Tシャツなど)がもらえたり、食事が提供されたりします。開催地が遠い場合は交通費や宿泊費が支給されるので実質無料で旅行ができます。
学生枠が設けられていることがあり比較的行きやすくなっています。
- 人との交流
ネット上や本戦会場では同じく競技プログラミングをしている人たちと交流することができます。 強い人に解説してもらったり、考察について議論したり、同じ実力帯の人たちと切磋琢磨するのは非常に楽しい経験です。
競技プログラミングのメリット
- プログラミング・アルゴリズム力が身につく
自分でプログラムを組む必要があるので高速で正確なコーディング力が非常に養われます。
他にも、プログラムからバグを発見したり、無駄な処理を省いてパフォーマンスを改善したりできるようになります。
また、問題に対する論理的な思考力やアルゴリズムに対する知識・理解が深まります。
- 大学の講義との関連
(これは学部や受ける講義によって違う可能性がありますが) 講義で行った内容が競技プログラミングで出題されることもよくあります。ただ講義を聞いているよりも実際に自分で書いたほうが理解が深まることが多いです。逆に競技プログラミングでやった内容が講義で出てくることもあるのでそこの勉強は楽になります。
- 就職に役立つ…?
競技プログラミングのレートは一定のコーディング能力があることを示せるので、その種の職種に対してはアピールポイントになる可能性は高いです。
実際にAtCoderは競技プログラミングを介した就職・転職サービスを提供しています。
https://jobs.atcoder.jp/home
活動内容
- 練習会
練習会ではバーチャルコンテストを立てて決められた時間内で問題を解きます。
コンテスト後には解説会を行い解法について議論します。
- 講習会
講習会ではあるアルゴリズムについてスライドを使って解説します。また、そのアルゴリズムを使用する問題を解くことで理解を深めます。
- ICPCへの参加
横浜国立大の代表としてICPCに参加します。
ICPCは3人チームを組んで参加しますが部のつながりがあるのでチームメンバーは集めやすいと思います。
- 合宿への参加(任意)
合宿では全国各地から人が集まって同じ会場で問題を解きます。他大学の知り合いが増えたり強い人に教えてもらえたりするのでとても楽しいです。
よくある質問
Q. 初心者でも大丈夫ですか?
A. 大丈夫です
部員も大学からプログラミングを始めた人が大半を占めています。
Q. 必要なものは何ですか?
A. ノートPCのみ
活動する上で必要なものはノートPCだけです。どこからでも気軽に参加できます。
Q. プログラミング言語は何を使いますか?
A. 主に C++
競プロではプログラムを実行できる時間に制限があるので、実行速度が高速なC++が主に使われています。私たちの部でもC++を使用している人が大半です。
Q. なにから始めればいいですか?
A. 言語の基本を学びましょう
まずはプログラミング言語の書き方から習得するのがよいと思います。
例えばこちらではコードを書きながらC++を学べます。
言語の基本を習得済みの方は、こちらの問題集の問題を解いてみるとよいと思います。
Q. 部費はありますか?
A. ありません
無料です。
Q. 兼サーはできますか?
A. できます
活動は平日は週1なので他のサークルと兼ねるのも可能です。
Q. 他にも聞きたいことがあります
こちらのTwitterアカウントで随時受け付けています
横国に合格された皆様、おめでとうございます!
— 横浜国大 競技プログラミング部 (@ynu_cpc) March 21, 2019
競技プログラミング部ではプログラミング技術を向上させるため講習会などを行なっています。
興味のある方はぜひ一度足を運んでみてください。#春から横国
年間スケジュール
去年の例を紹介します。
-
7月
- ACM-ICPC国内予選
-
9月
- 会津合宿
- JAG合宿 (東京)
-
11月
- CODE FESTIVAL
-
12月
- ACM-ICPCアジア地区予選 横浜大会
-
2月
- 全国統一プログラミング王決定戦
記事はこちら
- 全国統一プログラミング王決定戦
-
3月
- 立命館合宿 (滋賀)
- 山梨大学との合同合宿
記事はこちら
最後に
皆さんが競技プログラミング部に来てくれるのを楽しみにしています!