Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
AI
Uploaded by
AtCoder Inc.
15,037 views
AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
Education
◦
Read more
8
Save
Share
Embed
Embed presentation
Download
Downloaded 54 times
1
/ 36
2
/ 36
3
/ 36
4
/ 36
5
/ 36
6
/ 36
7
/ 36
8
/ 36
9
/ 36
10
/ 36
11
/ 36
12
/ 36
13
/ 36
14
/ 36
15
/ 36
16
/ 36
17
/ 36
18
/ 36
19
/ 36
20
/ 36
21
/ 36
22
/ 36
23
/ 36
24
/ 36
25
/ 36
26
/ 36
27
/ 36
28
/ 36
29
/ 36
30
/ 36
31
/ 36
32
/ 36
33
/ 36
34
/ 36
35
/ 36
36
/ 36
More Related Content
PDF
abc027
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 008 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 021 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 026 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 023 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 010 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 011 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 024 解説
by
AtCoder Inc.
abc027
by
AtCoder Inc.
AtCoder Beginner Contest 008 解説
by
AtCoder Inc.
AtCoder Beginner Contest 021 解説
by
AtCoder Inc.
AtCoder Beginner Contest 026 解説
by
AtCoder Inc.
AtCoder Beginner Contest 023 解説
by
AtCoder Inc.
AtCoder Beginner Contest 010 解説
by
AtCoder Inc.
AtCoder Beginner Contest 011 解説
by
AtCoder Inc.
AtCoder Beginner Contest 024 解説
by
AtCoder Inc.
What's hot
PDF
AtCoder Beginner Contest 013 解説
by
AtCoder Inc.
PPTX
AtCoder Beginner Contest 034 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 032 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 033 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 025 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 021 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 037 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 017 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 020 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 031 解説
by
AtCoder Inc.
PPTX
AtCoder Beginner Contest 012 解説
by
AtCoder Inc.
PPTX
AtCoder Beginner Contest 002 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 030 解説
by
AtCoder Inc.
PDF
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
PDF
AtCoder Regular Contest 039 解説
by
AtCoder Inc.
PDF
最小カットを使って「燃やす埋める問題」を解く
by
shindannin
PPTX
CODE FESTIVAL 2014 本選 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 033 解説
by
AtCoder Inc.
PDF
様々な全域木問題
by
tmaehara
PDF
AtCoder Beginner Contest 007 解説
by
AtCoder Inc.
AtCoder Beginner Contest 013 解説
by
AtCoder Inc.
AtCoder Beginner Contest 034 解説
by
AtCoder Inc.
AtCoder Regular Contest 032 解説
by
AtCoder Inc.
AtCoder Regular Contest 033 解説
by
AtCoder Inc.
AtCoder Beginner Contest 025 解説
by
AtCoder Inc.
AtCoder Regular Contest 021 解説
by
AtCoder Inc.
AtCoder Regular Contest 037 解説
by
AtCoder Inc.
AtCoder Beginner Contest 017 解説
by
AtCoder Inc.
AtCoder Beginner Contest 020 解説
by
AtCoder Inc.
AtCoder Regular Contest 031 解説
by
AtCoder Inc.
AtCoder Beginner Contest 012 解説
by
AtCoder Inc.
AtCoder Beginner Contest 002 解説
by
AtCoder Inc.
AtCoder Regular Contest 030 解説
by
AtCoder Inc.
プログラミングコンテストでの乱択アルゴリズム
by
Takuya Akiba
AtCoder Regular Contest 039 解説
by
AtCoder Inc.
最小カットを使って「燃やす埋める問題」を解く
by
shindannin
CODE FESTIVAL 2014 本選 解説
by
AtCoder Inc.
AtCoder Beginner Contest 033 解説
by
AtCoder Inc.
様々な全域木問題
by
tmaehara
AtCoder Beginner Contest 007 解説
by
AtCoder Inc.
Similar to AtCoder Beginner Contest 015 解説
PDF
AtCoder Beginner Contest 019 解説
by
AtCoder Inc.
PDF
Indeedなう 予選B 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 006 解説
by
AtCoder Inc.
PPTX
AtCoder Beginner Contest 004 解説
by
AtCoder Inc.
PDF
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
PDF
Code Formula 予選B 解説
by
AtCoder Inc.
PDF
CODE THANKS FESTIVAL 2014 A日程 解説
by
AtCoder Inc.
PDF
Abc009
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 009 解説
by
AtCoder Inc.
PDF
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
by
hixi365
PDF
AtCoder Beginner Contest 030 解説
by
AtCoder Inc.
PDF
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
PDF
130323 slide all
by
ikea0064
PDF
Code Formula 2014 予選A 解説
by
AtCoder Inc.
PPTX
AtCoder Beginner Contest 003 解説
by
AtCoder Inc.
PPTX
CODE FESTIVAL 予選B 解説
by
AtCoder Inc.
PDF
CODE FESTIVAL 2015 予選B 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 029 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 028 解説
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 018 解説
by
AtCoder Inc.
AtCoder Beginner Contest 019 解説
by
AtCoder Inc.
Indeedなう 予選B 解説
by
AtCoder Inc.
AtCoder Beginner Contest 006 解説
by
AtCoder Inc.
AtCoder Beginner Contest 004 解説
by
AtCoder Inc.
実践・最強最速のアルゴリズム勉強会 第二回講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
Code Formula 予選B 解説
by
AtCoder Inc.
CODE THANKS FESTIVAL 2014 A日程 解説
by
AtCoder Inc.
Abc009
by
AtCoder Inc.
AtCoder Beginner Contest 009 解説
by
AtCoder Inc.
アルゴリズムのお勉強 アルゴリズムとデータ構造 [素数・文字列探索・簡単なソート]
by
hixi365
AtCoder Beginner Contest 030 解説
by
AtCoder Inc.
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
by
AtCoder Inc.
130323 slide all
by
ikea0064
Code Formula 2014 予選A 解説
by
AtCoder Inc.
AtCoder Beginner Contest 003 解説
by
AtCoder Inc.
CODE FESTIVAL 予選B 解説
by
AtCoder Inc.
CODE FESTIVAL 2015 予選B 解説
by
AtCoder Inc.
AtCoder Beginner Contest 029 解説
by
AtCoder Inc.
AtCoder Beginner Contest 028 解説
by
AtCoder Inc.
AtCoder Beginner Contest 018 解説
by
AtCoder Inc.
More from AtCoder Inc.
PPTX
TCO2017R1
by
AtCoder Inc.
PPTX
AtCoderに毎回参加したくなる仕組み
by
AtCoder Inc.
PDF
Square869120 contest #2
by
AtCoder Inc.
PDF
AtCoder Beginner Contest 035 解説
by
AtCoder Inc.
PDF
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
by
AtCoder Inc.
PDF
Chokudai Contest 001
by
AtCoder Inc.
PDF
AtCoder Regular Contest 049 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 048
by
AtCoder Inc.
PDF
MUJINプログラミングチャレンジ2016 解説
by
AtCoder Inc.
PDF
DDPC 2016 予選 解説
by
AtCoder Inc.
PDF
arc047
by
AtCoder Inc.
PDF
abc032
by
AtCoder Inc.
PDF
CODE FESTIVAL 2015 沖縄ツアー 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 046
by
AtCoder Inc.
PDF
abc031
by
AtCoder Inc.
PDF
CODE FESTIVAL 2015 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 045 解説
by
AtCoder Inc.
PDF
CODE FESTIVAL 2015 予選A 解説
by
AtCoder Inc.
PDF
AtCoder Regular Contest 044 解説
by
AtCoder Inc.
PDF
天下一プログラマーコンテスト2015 予選B 解説
by
AtCoder Inc.
TCO2017R1
by
AtCoder Inc.
AtCoderに毎回参加したくなる仕組み
by
AtCoder Inc.
Square869120 contest #2
by
AtCoder Inc.
AtCoder Beginner Contest 035 解説
by
AtCoder Inc.
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
by
AtCoder Inc.
Chokudai Contest 001
by
AtCoder Inc.
AtCoder Regular Contest 049 解説
by
AtCoder Inc.
AtCoder Regular Contest 048
by
AtCoder Inc.
MUJINプログラミングチャレンジ2016 解説
by
AtCoder Inc.
DDPC 2016 予選 解説
by
AtCoder Inc.
arc047
by
AtCoder Inc.
abc032
by
AtCoder Inc.
CODE FESTIVAL 2015 沖縄ツアー 解説
by
AtCoder Inc.
AtCoder Regular Contest 046
by
AtCoder Inc.
abc031
by
AtCoder Inc.
CODE FESTIVAL 2015 解説
by
AtCoder Inc.
AtCoder Regular Contest 045 解説
by
AtCoder Inc.
CODE FESTIVAL 2015 予選A 解説
by
AtCoder Inc.
AtCoder Regular Contest 044 解説
by
AtCoder Inc.
天下一プログラマーコンテスト2015 予選B 解説
by
AtCoder Inc.
AtCoder Beginner Contest 015 解説
1.
AtCoder Beginner Contest
015 解説 AtCoder株式会社 代表取締役 高橋 直大 2014/11/22 1
2.
競技プログラミングを始める前に •競技プログラミングをやったことがない人へ –まずはこっちのスライドを見よう!
–http://www.slideshare.net/chokudai/abc004 2014/11/22 2
3.
©AtCoder Inc. All
rights reserved. 3 A問題 高橋くんの研修 1.問題概要 2.アルゴリズム 2014/11/22
4.
A問題 問題概要 2014/11/22
•文字列 S がA, Bが与えられる •文字数が多い方を出力せよ •制約 •1 ≦ |A|, |B|≦ 10 –|S| は文字列Sの長さを表します! •|A| ≠ |B| 4
5.
A問題 アルゴリズム •基本的なプログラムの流れ
–標準入力から、必要な入力を受け取る •今回の場合は、 A,B という2つの文字列 –問題で与えられた処理を行う •今回は、長い方を調べる –標準出力へ、答えを出力する •長い方を出力する 2014/11/22 5
6.
A問題 アルゴリズム •入力
–2つの文字列を、標準入力から受け取る •Cであれば、scanf(“%s”, &A); など •C++であれば、cin >> A; •入力の受け取り方は、下記の練習問題に記載があります。 –http://practice.contest.atcoder.jp/tasks/practice_1 •↑の例では一つ分しか書いてないよ! 2014/11/22 6
7.
A問題 アルゴリズム •今回の問題は、文字列の長さを比較するだけ
–文字列の長さを取得する関数は、どの言語にも基本的に 入っている •もし見つからなかったら、終端文字(¥0)までループを回して文字 数を数えよう! •不等号の向きを間違えないようにしよう! 2014/11/22 7
8.
A問題 アルゴリズム •出力
–求めた答えを、標準出力より出力する。 –言語によって違います。 •答えをSに入れたとする •printf(“%s¥n”, S); (C) •cout << S << endl; (C++) •System.out.println(S); (Java) •各言語の標準出力は、下記の練習問題に記載があります。 –http://practice.contest.atcoder.jp/tasks/practice_1 2014/11/22 8
9.
©AtCoder Inc. All
rights reserved. 9 B問題 高橋くんの集計 1.問題概要 2.アルゴリズム 2014/11/22
10.
B問題 問題概要 •N個の整数が与えられる
•0以外の整数の平均値を出力しなさい 2014/11/22 10
11.
B問題 アルゴリズム •入力
–整数Nを受け取る –数列Aの数字をN個受け取る •受け取り方は複数いくつかある –1行纏めて受け取って、スペースでsplitする –1つずつ受け取る •言語によって受け取りやすい書き方が違う! •詳しくはpracticeで確認しよう! –http://practice.contest.atcoder.jp/tasks/practice_1 2014/11/22 11
12.
B問題 アルゴリズム •処理
–やるべきことは2つ! •バグの総数を調べる –こちらはforループを回して足し算をしていくだけ •バグが存在するソフトウェアの個数を調べる –こちらは、ifなどで判定してカウントする –この2つが出来れば、あとは平均を取る! •切り上げることに注意! •切り上げる方法も多数 –あまりが0でなかった場合、答えに1を足す –一つの計算式で表すことも可能 »(sum + count – 1)/ count 2014/11/22 12
13.
B問題 アルゴリズム •出力
–A問題と同じく、答えを出力するだけ –Print(ret)みたいな感じ 2014/11/22 13
14.
©AtCoder Inc. All
rights reserved. 14 C問題 高橋くんのバグ探し 1.問題概要 2.アルゴリズム 2014/11/22
15.
C問題 問題概要 •K択問題がN個あります。
•全ての選択肢に内部的に整数が割り当てられてお り、選ばれた選択肢のXOR(排他的論理和)の値を利 用するが、この値が0になるとバグが発生する。 •選択肢に割り当てられた整数が与えられるので、バ グが発生することがあり得るかを判定しなさい。 •制約 –1 ≦ N ≦ 5 –1 ≦ K ≦ 5 –0 ≦ Ti,j ≦ 127 2014/11/22 15
16.
C問題 アルゴリズム •どう解くか?
–質問の数は5つ、選択肢も5つ •非常に数が少ない! –つまり、全探索することが可能! –どうやって全探索をしよう? 2014/11/22
17.
C問題 アルゴリズム •1つの質問だったら?
–ForループでK回回せば、全通り試せる •2つの質問だったら? –Forループを2重で組み合わせれば、全通り試せる •3つの質問だったら? –Forループを3重で組み合わせれば、全通り試せる •・・・・こんなのはやってられない! 2014/11/22
18.
C問題 アルゴリズム •1つの質問だったら?
–ForループでK回回せば、全通り試せる •2つの質問だったら? –Forループを2重で組み合わせれば、全通り試せる •3つの質問だったら? –Forループを3重で組み合わせれば、全通り試せる •・・・・こんなのはやってられない! 2014/11/22
19.
C問題 アルゴリズム •ではどう解くか?
•深さ優先探索を使おう! –深さ優先探索って? 2014/11/22
20.
C問題 アルゴリズム •深さ優先探索
–こんなの 2014/11/22 スタート 質問1A 質問1B 質問1C 質問2A 質問2B 質問2C 質問2A 質問2B 質問2C
21.
C問題 アルゴリズム •深さ優先探索
–こんなの 2014/11/22 スタート 質問1A 質問1B 質問1C 質問2A 質問2B 質問2C 質問2A 質問2B 質問2C
22.
C問題 アルゴリズム •要するにどういうこと?
–質問や選択肢の数に合わせて、潜って行くように探索し ていく! –こうすることで、全ての質問の組み合わせに対して調べる ことが出来る! •でもどう組むの? 2014/11/22
23.
C問題 アルゴリズム •再帰関数を使おう!
–自分の関数の内部で、自分を呼び出す! –例えばこんな感じ •最初はdfs(0, 0);って感じで呼び出す bool dfs(int numQ, int value){ if(numQ == N) return (value == 0); for(int i = 0; i < K; i++){ if(dfs(numQ+1, value^T[numQ,i])) return true; } return false; } 2014/11/22 dfs関数の中から、 dfsをもう一度呼び出す! 今の質問数、値から 今どこにいるかを格納 質問がもうなければ 0になっているかを調べる 探索した結果、0になる組 み合わせが無ければfalse
24.
C問題 アルゴリズム •計算時間は大丈夫?
–N回の質問で、K回の選択肢 –全ての組み合わせは퐾푁個 –N,Kともに5以下なので、この組み合わせの数は大したこと がない •最も深いループが1億程度回らなければ、制限時間に間に合うこ とが多い 2014/11/22
25.
C問題 アルゴリズム •他の方法は?
–深さ優先探索で、もう少し工夫する方法 •「今までの質問数」「ここまでの値」が同じものを1度調べていれば、 もう調べる必要がない –こうすることにより、計算量を퐾푁からNKまで減らせる –幅優先探索などでももちろん良い •一筆書きのように調べるのではなく、1手1手進めていく方法 •詳しくは他の幅優先探索を使う問題を見てね! 2014/11/22
26.
©AtCoder Inc. All
rights reserved. 26 D問題 高橋くんの苦悩 1.問題概要 2.アルゴリズム 2014/11/22
27.
C問題 問題概要 •幅Wの領域に、幅A[i]、価値B[i]の、N枚のスクショを選
択して貼りつける •貼りつけられるスクショは、 –合計枚数がK枚以下 –合計の幅がW以下 •でなければならない。価値の和の最大値を求めなさい。 •制約 –1≦N≦50 –1≦W≦10000 –1≦A[i],B[i]≦1000 2014/11/22
28.
D問題 アルゴリズム •どういう問題?
•非常に有名な「ナップサック問題」の亜種です –商品がN個、重さWまで持てる。 –各商品の重さA[i]と、価値B[i]が与えられる –価値を最大化しなさい •今回は、それに加えて、「商品の個数」が制約に加 わっている 2014/11/22
29.
D問題 アルゴリズム •深さ優先探索で解ける?
–今回は、C問題に合わせると、 •N個の商品について、「選ぶ」「選ばない」を選ぶ必要があります。 •XORではなく価値の和を最大化したいです。 •いくつかの制約があります –みたいな問題になるため、似たような深さ優先探索で、答 えを求めることは可能です。 •ただし、制限時間内に終わるわけではない! –計算量を考えよう! •選択肢は「選ぶ」「選ばない」の2つ •商品はN個、つまり50個以下 –2の50乗は10の15乗程度だが、これは組み合わせが多過ぎる 2014/11/22
30.
D問題 アルゴリズム •では、どうするか?
–全部調べるのはなんとなくもったいない –計算を上手く纏められると嬉しい。 –そこで出てくるのが「動的計画法!」 2014/11/22
31.
D問題 アルゴリズム •動的計画法って?
–ある状態に対して、「すでに訪れたか」や「最大値」「最小 値」を計算することで、無駄に計算をしないこと! –状態って何? •「今持ってる価値」とか「何個目まで調べた」とか「今選んだスク ショの合計の幅」とか、そのような、探索をする上で必要な情報! 2014/11/22
32.
D問題 アルゴリズム •さっきと同じ感じで、深さ優先探索のイメージをして
みよう! –自分が書くならこんな感じ •Int dfs(int useW, int useNum, int now) { 以下略 –useWは、「今まで選んだスクショの合計幅」 –useNumは、「今まで選んだスクショの数」 –Nowは、「今選ぶかどうか調べたいスクショが何枚目か」 »これに対して、dfs(0,0,0)みたいな感じで呼び出したい »で、最大値が返ってくると嬉しい –これで動いたら嬉しい! •でも実際は間に合わない 2014/11/22
33.
D問題 アルゴリズム •どうすれば良いか?
–解法1:メモ化再帰を使う •メモ化再帰って? –深さ優先探索で書いた時に、同じ計算を省略する! –解法2:動的計画法を使う »っていっても、メモ化再帰も動的計画法の一種ですが •「幅」「使った枚数」「何枚目まで見たか」に対して、価値の最大値 を計算する –再帰ではなく、ボトムアップで計算する! 2014/11/22
34.
D問題 アルゴリズム •解法1:メモ化再帰を使う
–どう計算を省略するの? •要するに、同じ計算をしなければ良い •結果メモ用配列dp[W][N][N]を用意する •Int dfs(int useW, int useNum, int now)とか書いたとする –もしdp[useW][useNum][now]に既に数が入っていたら、その数を返 す –入っていなければ普通に計算をし、returnするときに、 dp[useW][useNum][now]に、returnする数を入れる »こうすることにより、2回目から計算しなくて良くなる! –計算量は? •同じ計算をしなくなったので、useW, useNum, nowの組み合わせ が何通りあるか調べれば良い –これはそれぞれW,N,Nであり、それに対して2択の選択肢 –5000万くらい!よってギリギリ間に合う! 2014/11/22
35.
D問題 アルゴリズム •解法2:動的計画法を使う!
–dp[i][j][k]に、k番目まで調べた時の、幅合計i、使用枚数j の最大値を入れるとする –これは、dp[i][j][k-1]か、dp[i-A[k-1]][j-1][k-1]+B[k-1]のどち らかしかありえない! •なぜか? •K番目まで調べて、幅i、枚数jが最大になる、ということは、K番目 のスクショを選んで最大になったか、選ばず最大になったか、どち らかしかない –K番目を使わない場合は、dp[i][j][k-1] –K番目を使う場合は、使う前がdp[i-A[k-1]][j-1][k-1]であり、そこにB[k- 1]を足すことで、求めることが出来る!! 2014/11/22
36.
D問題 アルゴリズム •解法3:動的計画法を使う!工夫する版!
–解法2のkは実は省略できる •K番目を使わない場合→そのまま •K番目を使う場合→dp[i][j] = dp[i-A[k-1]][j-1] –みたいな感じで、同じメモリ上で回すことが出来る –ただし、この場合、「同じスクショを2回以上使わない工 夫」をする必要がある。 •具体的には、ループの向きを逆にすると良い! •逆にすれば、「直前に足したのをまた足してしまう」ということがな くなる –詳しくは生放送で実装の時に説明するよ!! 2014/11/22
Download