pythonではじめる競技プログラミング
DESCRIPTION
PyCon JP 2014のLTで発表した資料です( o・ω・)ノTRANSCRIPT
Pythonではじめる 競技プログラミング
@cocodrips
競技プログラミングって 聞いたことありますか?
競技プログラミング 参加したことありますか?
(TopCoder, ICPCなど)
10 以下の整数をもつ、長さNの4つの配列A, B, C, Dがある。各配列から1つずつ要素を選び、それらの総和が0になるパターン数を答えよ。(1≦N≦20) 時間制限:2秒, スタック・メモリ制限:256MB !
例 A = [1, 2, 3, 4, 5] B = [-1, -2, -3, -4, -5] C = [2, 4, 6, 8, 10] D = [0, -3, -6, -9]
問題9
1 + (-3) + 8 + (-6) = 0
単純な解法 (全探索)
全てのパターンを試して条件にあったらカウントしていく
10 以下の整数をもつ、長さNの4つの配列A, B, C, Dがある。各配列から1つずつ要素を選び、それらの総和が0になるパターン数を答えよ。(1≦N≦200) 時間制限:2秒, スタック・メモリ制限:256MB !
例 A = [1, 2, 3, 4, 5] B = [-1, -2, -3, -4, -5] C = [2, 4, 6, 8, 10] D = [0, -3, -6, -9]
問題29
さっきと同じ方法で解くと・・・
さっきと同じ方法で解くと・・・
不正解_(:3 」∠)_
!
時間制限:2秒, スタック・メモリ制限:256MB
109以下の整数をもつ、長さNの4つの配列A, B, C, Dがある。各配列から1つずつ要素を選び、それらの総和が0になるパターン数を答えよ。(1≦N≦200)
さっきと同じ方法で解くと・・・
不正解_(:3 」∠)_
ちょっと工夫した解法
Ai + Bj + Ck + Dl = 0
ちょっと工夫した解法
Ai + Bj = - (Ck + Dl)
Ai + Bj + Ck + Dl = 0
競技プログラミングとは
与えられた問題に対して 解く早さと正確さを競う競技
コンテスト: ICPC, Google Code Jam, TopCoder(SRM), CodeForces, AtCoder 等
1. 制限時間内に3~10問位の問題を解く 2. 速く解くほど点数が高い 3. 順位に応じてレーティングが変化する
基本的なルール
レーティングに応じて、 ランク分けがされたり
競技プログラミングの良い所
1プログラミングで人と競争できる!青春! 自分の実力・成長がTOEICみたいに数値化される
競技プログラミングの良い所
1
2 計算量を瞬時に見積もれるようになる どれくらいまでが時間内に動作するかがわかる
3 同じ問題の他人の解き方が見られる
競技プログラミングの良い所
4 標準ライブラリや言語仕様に詳しくなる
5 楽しい!
プログラミングで人と競争できる!青春! 自分の実力・成長がTOEICみたいに数値化される
競技プログラミングで Pythonを使うと便利!!
• オーバーフローを気にしなくていい!!!!!!何百桁でも怖くない☆(ゝω・)v
• デバッグが楽
• 便利標準ライブラリがたくさん(itertools・collections等)
1
2
3
TopCoder Codeforces AtCoder
開催頻度 月3回 月6回 毎週土曜日
問題文 英語 英語 日本語
問題数と時間 3問/75分 5問/120分 4問/90分
PythonのVersion 2 2, 3 2, 3解ける人数
(%)
Topcoderの何色に相当するか Div2 Div1 Div2 Div1 ABC ARC
100% 11
22
4 21
32
0%
1
2
31
23
1
2
4
5
2
3
54
3 1 4
21
3
1
2
3
4
主要なコンテストの紹介初心者に おすすめ
易
難