SlideShare una empresa de Scribd logo
1 de 82
Descargar para leer sin conexión


第21回アルゴリズム勉強会
6月14日 @Cafe IKAGAWADO?
アルゴリズム勉強会とは?
• 勉強会のコンセプト



- 知的好奇心を満たす

- 技術力を高める(アイディア力)

- 大学や社会人の垣根を超えた交流

- 知識やアルゴリズムを共有する場

 を目指す



• 競技プログラミング(AtCoder/TopCoder)

の問題を中心に勉強します。

自己紹介
"
• Web系やAndroidアプリのプログラミング
• Java/PHP/Python/JavaScript/C
• 最近は Haskellを勉強中です。
"
• TopCoder レーティング 1026 (グリーンコーダー)
• Rank 5027 of 10087
3
一応 こういうことはしませんので

あしからず
4
スマホアプリ
Webアプリ
デザイン
サービスや
ハードウェア
ビジネス的なお話
やることは・・・
プログラミング
5
アルゴリズム
アルゴリズムとは?
6
問題 アルゴリズム 答え
数値 とか 文字列
文字列
解法を考え、

プログラミングを行う
競技プログラミングとは?
• 決められた時間内に、条件に合うようにプログラムを作ります。
• 難しいアルゴリズムや、頭の体操のような問題があります。
"
• なるべく早く解くこと目指します。
7
もちろん、勉強会
ではのんびりといてください
競技プログラミングをやっても
実用性がないんじゃない?
8
No
9
競技プログラミングのメリット
"
A. いままで実装するのが難しいと感じてた事が

できるようになります。

B. 早く/速く実装することが出来ます。

C. 問題文をちゃんと読んで、

正しい(バグが少ない)実装をすることが出来ます。
D. デバッグや原因を調査する力が付きます。 10
計算量?
"
わかりやすいように簡単例を出してます。
11
1,2,3….,n の総和のプログラム
12
基本的に大丈夫だけど?
1,2,3….,n の総和のプログラム
13
14
O(n)
O(1)
有名な競技プログラミングサイト
15
• TopCoder 
• 全世界で59万人が登録している。"
• SRM(Single Round Match)が有名、賞金がもらえるコンテストもある。
• 対応言語は、Java/C++/C#/VB/Python
• レーティングがあり、そのレーティングの色が有名

• AtCoder
• http://atcoder.jp/
• AtCoder社は、@chokudaiさん(高橋直大さん)が社長で

TopCoderの解説本を書いていたり、プログラミングコンテストの賞金
などで有名。

• 日本語のプログラミングサイトで

多くの言語に対応している。


"
• Codeforces
• http://codeforces.com/
• ロシアのプログラミングコンテストサイト、英語で参加可能、

TopCoderに比べて難しめの傾向があり、答えも唯一ではない問題もある。
"
• AIZU ONLINE JUDGE
• http://judge.u-aizu.ac.jp/onlinejudge/
• 会津大学が行っている競技プログラミングサイト

日本の大学が行っているが英語がおおい(日本語の問題もある)
"
• POJ
• http://poj.org/
• 北京大学が行っているプログラミングコンテストサイト
"
• Google Code Jam
• https://code.google.com/codejam/japan
• Google社が行っているプログラミングコンテスト
• 一年に一度行われる。
参考図書
18
最近注目される"
競技プログラミング
19
http://doda.jp/engineer/guide/yosoku/09_1.html
勉強会の流れ
みなさんコーディングをしてもらいます。
各自出来た方は、システムテストをしてください。
その後、みなさんのコードを発表してもらいます。
コーディング環境
• 言語 (AtCoderが対応している言語)

C,C++/C++11,C#,Java,D,PHP,Python2/3,Perl,Ruby,

Haskell,Pascal,JavaScript,VB,OCaml,Scheme,Scala,Bash

• POH(Paiza)の問題は以下の言語     
Java,C,C++C#,PHP,Ruby,Python2,Perl
"
• 開発環境自由
• Eclipse/IntelliJ/VisualStudio/ SublimeText /ATOM・・
• 環境がなければ ideone などでもOK 21
今日やること
1. ABC #009 A - 引越し作業
• http://abc009.contest.atcoder.jp/tasks/abc009_1

2. ABC #009 B - 心配性な富豪、ファミリーレストランに行く。
• http://abc009.contest.atcoder.jp/tasks/abc009_2
"
3. ARC #022 B - 細長いお菓子
• http://arc022.contest.atcoder.jp/tasks/arc022_2

4. Paiza オンライン ハッカソン Vol 1
• https://paiza.jp/poh/ec-campaign

22
初めての方は部分点は
取るように頑張ってください
部分点有り
"
しゃくとり法
というアルゴリズムをします
部分点有り
注意事項
• 特別、休憩時間は取りません。

各自お好きなときに休憩時間をとってください。

(コーディングタイムと兼ねてます。)
"
• 参加費(会場使用費・ドリンク代)は500円となっております。

ドリンクバー形式になってますので、お好きに飲んでください
• TopCoderレーティング割が適用されます。
• グリーンコーダー   400円
• ブルーコーダー    200円
• イエローコーダー 以上 0円 23
注意事項
• 後半になるにつれて難しくなってきます。
"
• 自分の用事やもくもく何かしててもOKです。
"
• 途中退出OKです。
24
AtCoder チュートリアル
25
AtCoder チュートリアル
26
AtCoder チュートリアル
27
AtCoder チュートリアル
28
所属は適当で

なんなら 全角スペースで
AtCoder チュートリアル
29
AtCoder チュートリアル
30
問題文
AtCoder チュートリアル
31
提出はこちらから
AtCoder チュートリアル
32
http://abc009.contest.atcoder.jp/
tutorial#tutorial_chap_2
AtCoder チュートリアル
33
AtCoder チュートリアル
AC になればOKです!
34
AtCoder チュートリアル
35
問題頑張ってください。
36
「POH Vol.1」 などで検索!
37
解説
38
ARC #022 B - 細長いお菓子
解説
39
40
1 2 1 3 1 4 4
41
1 2 1 3 1 4 4
42
1 2 1 3 1 4 4
43
1 2 1 3 1 4 4
2
44
1 2 1 3 1 4 4
45
1 2 1 3 1 4 4
46
1 2 1 3 1 4 4
47
1 2 1 3 1 4 4
3
48
1 2 1 3 1 4 4
49
1 2 1 3 1 4 4
50
1 2 1 3 1 4 4
2
これも解法のひとつです
が・・99点になります
"
"
"
最大O(n
2
) かかります
"
実際はもっと少ないけど
51
O(n)で解きたい
52
53
"
"
しゃくとり法
実は、人間が考えるのと
だいたい同じ
54
味がチェックされたか

どうか配列が必要
"
"
"
例えば
boolean[] check=new boolean[10000+1]
"
55
56
1 2 1 3 1 4 4
check[1]=true
57
1 2 1 3 1 4 4
check[2]=true
58
1 2 1 3 1 4 4
2
check[1]=false
59
1 2 1 3 1 4 4
check はそのままつかう
jを戻さない(再利用する)
60
1 2 1 3 1 4 4
61
1 2 1 3 1 4 4
3
62
1 2 1 3 1 4 4
2
jを戻さない(再利用する)
63
1 2 1 3 1 4 4
64
1 2 1 3 1 4 4
65
1 2 1 3 1 4 4
3
66
1 2 1 3 1 4 4
67
1 2 1 3 1 4 4
しゃくとり法の特徴
• 区間の値に対する状態を持つ必要がある(配列が望ましい)
• 普通の2重ループと見せかけて、使いまわす
• j (右側)のインデックスをリセットしない
• 区間の状態をリセットしない
• 基準がずれるときにその基準の値を状態から外す。
68
これだと"
O(n)  "
"
で解けます。
69
Java ソースコード
http://arc022.contest.atcoder.jp/submissions/182824
"
Pythonソースコード
http://arc022.contest.atcoder.jp/submissions/183112
70
「POH Vol.1」 の解説
しゃくとり法"
の応用です
他の解法でも100点取れます。
実はテストケースが弱いので結構100点いけるっぽいです
71
5 2
9000
3000
1000
7000
5000
9000
3000
商品の値段
"
それぞれのキャンペーン
"
問題的にはキャンペーンは独立のものとして

考えて良い
73
1000 3000 5000 7000 9000
まずソートします。
74
1000 3000 5000 7000 9000
10000 > 9000
閾値より大きかったら右側を左に動かす
75
8000 < 9000
1000 3000 5000 7000 9000
閾値より少なかったら左を右に動かす
76
10000 > 9000
1000 3000 5000 7000 9000
77
8000 < 9000
1000 3000 5000 7000 9000
これ以上進めなくなったら終了

(今までの閾値以下の最大値を返す)

途中で閾値になったらその場で終了 
総括
78
総括
• とりあえず問題を解けるのが大事
"
• 簡単な問題を解けるようになったら、計算量を考えてみる。
"
• しゃくとり法
79
ふりかえり
80
本日の競技プログラミングの予定
"
"
• 21時∼23時 AtCoder Regular Contest (ARC#025)
次回

第22回アルゴリズム勉強会
7月を予定
82

Más contenido relacionado

La actualidad más candente

二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方Kensuke Otsuki
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Inc.
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解くshindannin
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Inc.
 
AtCoder Regular Contest 038 解説
AtCoder Regular Contest 038 解説AtCoder Regular Contest 038 解説
AtCoder Regular Contest 038 解説AtCoder Inc.
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 
AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Inc.
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Inc.
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題tmaehara
 
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説AtCoder Inc.
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Inc.
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Inc.
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~Takuya Akiba
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Inc.
 

La actualidad más candente (20)

abc031
abc031abc031
abc031
 
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
二部グラフの最小点被覆と最大安定集合と最小辺被覆の求め方
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 
最大流 (max flow)
最大流 (max flow)最大流 (max flow)
最大流 (max flow)
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説
 
AtCoder Regular Contest 038 解説
AtCoder Regular Contest 038 解説AtCoder Regular Contest 038 解説
AtCoder Regular Contest 038 解説
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
目指せグラフマスター
目指せグラフマスター目指せグラフマスター
目指せグラフマスター
 
AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説
 
様々な全域木問題
様々な全域木問題様々な全域木問題
様々な全域木問題
 
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説
 
双対性
双対性双対性
双対性
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 

Similar a 第21回アルゴリズム勉強会

金大アルゴリズム勉強会#001資料
金大アルゴリズム勉強会#001資料金大アルゴリズム勉強会#001資料
金大アルゴリズム勉強会#001資料Takumi Murano
 
Yokozuna 日本語検索機能を評価しました
Yokozuna 日本語検索機能を評価しましたYokozuna 日本語検索機能を評価しました
Yokozuna 日本語検索機能を評価しましたTakashi Sogabe
 
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版Masami Yabushita
 
プログラミング勉強会
プログラミング勉強会プログラミング勉強会
プログラミング勉強会ssuser50bb47
 
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかわんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかMasami Yabushita
 
第3回BDD勉強会
第3回BDD勉強会第3回BDD勉強会
第3回BDD勉強会zakihaya
 
RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介MITSUNARI Shigeo
 
パフォーマンスの良いGASの書き方 Best Practice
パフォーマンスの良いGASの書き方 Best Practiceパフォーマンスの良いGASの書き方 Best Practice
パフォーマンスの良いGASの書き方 Best Practice啓介 大橋
 
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版ありますAI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版ありますfukuoka.ex
 

Similar a 第21回アルゴリズム勉強会 (10)

金大アルゴリズム勉強会#001資料
金大アルゴリズム勉強会#001資料金大アルゴリズム勉強会#001資料
金大アルゴリズム勉強会#001資料
 
Yokozuna 日本語検索機能を評価しました
Yokozuna 日本語検索機能を評価しましたYokozuna 日本語検索機能を評価しました
Yokozuna 日本語検索機能を評価しました
 
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版T82 aoitan あおいたんのパズルを数学しましょうか_修正版
T82 aoitan あおいたんのパズルを数学しましょうか_修正版
 
プログラミング勉強会
プログラミング勉強会プログラミング勉強会
プログラミング勉強会
 
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうかわんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
わんくま勉強会東京#82 あおいたんのパズルを数学しましょうか
 
第3回BDD勉強会
第3回BDD勉強会第3回BDD勉強会
第3回BDD勉強会
 
RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介
 
パフォーマンスの良いGASの書き方 Best Practice
パフォーマンスの良いGASの書き方 Best Practiceパフォーマンスの良いGASの書き方 Best Practice
パフォーマンスの良いGASの書き方 Best Practice
 
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版ありますAI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
 
Q13
Q13Q13
Q13
 

第21回アルゴリズム勉強会