pythonではじめる競技プログラミング

19
Pythonではじめる 競技プログラミング

Upload: cocodrips

Post on 18-Jun-2015

7.240 views

Category:

Technology


0 download

DESCRIPTION

PyCon JP 2014のLTで発表した資料です( o・ω・)ノ

TRANSCRIPT

Page 1: Pythonではじめる競技プログラミング

Pythonではじめる 競技プログラミング

Page 2: Pythonではじめる競技プログラミング

@cocodrips

Page 3: Pythonではじめる競技プログラミング

競技プログラミングって 聞いたことありますか?

Page 4: Pythonではじめる競技プログラミング

競技プログラミング 参加したことありますか?

(TopCoder, ICPCなど)

Page 5: Pythonではじめる競技プログラミング

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

Page 6: Pythonではじめる競技プログラミング

単純な解法 (全探索)

全てのパターンを試して条件にあったらカウントしていく

Page 7: Pythonではじめる競技プログラミング

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

Page 8: Pythonではじめる競技プログラミング

さっきと同じ方法で解くと・・・

Page 9: Pythonではじめる競技プログラミング

さっきと同じ方法で解くと・・・

不正解_(:3 」∠)_

Page 10: Pythonではじめる競技プログラミング

!

時間制限:2秒, スタック・メモリ制限:256MB

109以下の整数をもつ、長さNの4つの配列A, B, C, Dがある。各配列から1つずつ要素を選び、それらの総和が0になるパターン数を答えよ。(1≦N≦200)

さっきと同じ方法で解くと・・・

不正解_(:3 」∠)_

Page 11: Pythonではじめる競技プログラミング

ちょっと工夫した解法

Ai + Bj + Ck + Dl = 0

Page 12: Pythonではじめる競技プログラミング

ちょっと工夫した解法

Ai + Bj = - (Ck + Dl)

Ai + Bj + Ck + Dl = 0

Page 13: Pythonではじめる競技プログラミング

競技プログラミングとは

与えられた問題に対して 解く早さと正確さを競う競技

コンテスト: ICPC, Google Code Jam, TopCoder(SRM), CodeForces, AtCoder 等

Page 14: Pythonではじめる競技プログラミング

1. 制限時間内に3~10問位の問題を解く 2. 速く解くほど点数が高い 3. 順位に応じてレーティングが変化する

基本的なルール

レーティングに応じて、 ランク分けがされたり

Page 15: Pythonではじめる競技プログラミング

競技プログラミングの良い所

Page 16: Pythonではじめる競技プログラミング

1プログラミングで人と競争できる!青春! 自分の実力・成長がTOEICみたいに数値化される

競技プログラミングの良い所

Page 17: Pythonではじめる競技プログラミング

1

2 計算量を瞬時に見積もれるようになる どれくらいまでが時間内に動作するかがわかる

3 同じ問題の他人の解き方が見られる

競技プログラミングの良い所

4 標準ライブラリや言語仕様に詳しくなる

5 楽しい!

プログラミングで人と競争できる!青春! 自分の実力・成長がTOEICみたいに数値化される

Page 18: Pythonではじめる競技プログラミング

競技プログラミングで Pythonを使うと便利!!

• オーバーフローを気にしなくていい!!!!!!何百桁でも怖くない☆(ゝω・)v

• デバッグが楽

• 便利標準ライブラリがたくさん(itertools・collections等)

1

2

3

Page 19: Pythonではじめる競技プログラミング

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

主要なコンテストの紹介初心者に おすすめ