SlideShare a Scribd company logo
1 of 23
Download to read offline
©AtCoder Inc. All rights reserved. 1
AtCoder Beginner Contest #033
解説
AtCoder株式会社 代表取締役
高橋 直大
©AtCoder Inc. All rights reserved. 2
A問題 暗証番号
©AtCoder Inc. All rights reserved. 3
A問題 問題概要
• 4桁の数が与えられる
• 各桁が全て同じ数字であるか判定せよ
©AtCoder Inc. All rights reserved. 4
A問題 アルゴリズム
• 実際に4文字読み込み、if文などで判定すれば
よい
• 例: if(in[0]==in[1]&&in[1]==in[2]&&in[2]==in[3])
– 4桁とも同じ数字には法則性もある
– 0000, 1111, 2222, …, 9999は全て
1111の倍数。
• 1111で割り切れるかどうかを判定してもよい
• 例: if(N%1111==0)
©AtCoder Inc. All rights reserved. 5
B問題 町の合併
©AtCoder Inc. All rights reserved. 6
B問題 問題概要
• N個の町が合併し、1つの市になる。
• N個の町の合計人口の過半数以上の人口を持つ町
が存在すれば、新しい市の名前はその町の名前に
する
• 存在しなければ、atcoderという名前にする。
• どのような市の名前になるだろうか?
• 2 ≦ N ≦ 1,000, 1 ≦ 町の人口 ≦ 100,000
©AtCoder Inc. All rights reserved. 7
B問題 アルゴリズム
• 問題文にあるとおりに実際にループを回してシミュ
レートする
• 合計を計算する
• それぞれの町の人口がその合計の過半数以上ある
かをifで判定し、あればそれを出力
• なければatcoderと出力
• 計算量は O(N)
©AtCoder Inc. All rights reserved. 8
B問題 アルゴリズム
• ちなみに、過半数以上の人口がある町が2つ以上存
在することはない
• (2番目に多い町の人口が過半数あるとすると、1番
目と2番目の合計が全人口を超えてしまい矛盾す
る)
©AtCoder Inc. All rights reserved. 9
1. 問題概要
2. アルゴリズム
C問題 数式の書き換え
©AtCoder Inc. All rights reserved. 10
C問題 問題概要
• 1+2+3*4*5+6*7のような、各項が1桁で括弧がなく、
乗算と加算のみの数式が与えられる。
• これらの数字をいくつか0に書き換えて答えを0にし
たい。
• 最低何個書き換えればよいか。
• 数式の長さは100,000以下
©AtCoder Inc. All rights reserved. 11
C問題 アルゴリズム
• 各数字を0にする/しないを全て試すと O(2^N)かかる
ため、間に合わない
• ある場所を0に書き換えると、どこまで影響が出るだ
ろうか。
©AtCoder Inc. All rights reserved. 12
C問題 アルゴリズム
• 1*2*3の1を0にする→ 0*2*3=0
• 2*4*6の4を0にする→ 2*0*6=0
• 1+2+3の1を0にする→ 0+2+3
• 3*6+9の6を0にする→ 3*0+9=0+9
• 1+2*3+4の2を0にする→1+0*3+4=1+0+4
©AtCoder Inc. All rights reserved. 13
C問題 アルゴリズム
• *だけで繋がっている式のどこかに0があると、その
範囲の答えが0になる
• 0と書かれた項は+を越えた場所には影響しない
• 元の数式の答えを0にするには、+で区切られたそ
れぞれの部分の答えを全て0にしなければならない
• 要は、+で区切られた部分それぞれに最低1つの0の
項が欲しい
©AtCoder Inc. All rights reserved. 14
C問題 アルゴリズム
• +で区切る
• 区切ったそれぞれの部分に対して、初期状態で0が
1つもなければ、1回書き換えが必要
• この合計が必要な最小個数になる
• O(N)
©AtCoder Inc. All rights reserved. 15
D問題 三角形の分類
1. 問題概要
2. アルゴリズム
©AtCoder Inc. All rights reserved. 16
D問題 問題概要
• 座標平面上の点 (x[i],y[i]) がN個与えられる。
• N個のうち3つ選んで三角形を作ったとき、それが鋭
角三角形、直角三角形、鈍角三角形になるものを、
それぞれ数える。
• N ≦ 2,000
• 部分点: N ≦ 100
©AtCoder Inc. All rights reserved. 17
D問題 アルゴリズム
• 部分点解法
• 3点を全部選んで角度を計算する
• 角度が 0°より大きく90°より小さいか、90°に等し
いか、90°より大きく180°より小さいかの3種類を
分類できればよいので、内積を使ってもよい
• ベクトル(a,b)と(c,d)のなす角θが
– 0° < θ < 90°のとき ac+bd > 0
– θ = 90°のとき ac+bd = 0
– 90° < θ < 180° のとき ac+bd < 0
©AtCoder Inc. All rights reserved. 18
D問題 アルゴリズム
• さっきの方法だと計算量は O(N^3)
• 部分点は間に合うが、 満点はとれない
• これ以上早く計算するには、複数の三角形をまとめ
て数える必要がある
©AtCoder Inc. All rights reserved. 19
D問題 アルゴリズム
• 三角形の特徴に注目する
• 直角三角形は、1個が直角、他は鋭角
• 鈍角三角形は、1個が鈍角、他は鋭角
• 直角、鈍角となる∠ABCの組の個数を求めれば、直
角三角形、鈍角三角形の個数が分かり、全体から
引くと鋭角三角形の個数も計算できる。
©AtCoder Inc. All rights reserved. 20
D問題 アルゴリズム
• ∠ABCのBの部分を固定して、A,Cの組を数えること
にする
• ある点から他の全ての点に対して半直線を引くとこ
うなる (プログラムでは、角度だけをもてばよい。角
度はatan2等で計算できる。)
©AtCoder Inc. All rights reserved. 21
D問題 アルゴリズム
• これらの角度をソートし、左側を固定する
– どこまでが90°未満だろう?
– どこまでが90°だろう?
– どこまでが180°未満だろう?
• これらは二分探索やしゃくとり法でまとめて高速に
計算できる。二分探索ではO(N log N)、尺取だと
O(N)
• ただし環状になっているので、角度の扱いは少し複
雑で気をつける必要がある。(2周分配列をもったり、
内積・外積で求めると楽かもしれない)
©AtCoder Inc. All rights reserved. 22
D問題 アルゴリズム
• 全体をまとめると
– 一点選ぶ
– そこから他の全て点へのベクトルの角度を求め、ソートす
る。
– 二分探索やしゃくとり法で鈍角、直角の個数を数える
– 鋭角三角形の個数を、全体から鈍角、直角の個数を引く
ことで求める
• 計算量は合計で O(N^2 logn) (しゃくとり法の場合)
©AtCoder Inc. All rights reserved. 23
D問題 アルゴリズム
• 注意
• 2つのベクトルのなす角度が非常に小さかったり、非
常に90°に近かったり、非常に180°に近かったり
することがある。
例1: (-10000,-10000), (-10000,-9999),(10000,10000)
例2: (-10000,-10000), (-9999,10000),(10000,9999)
例3: (-10000,-10000), (1,0),(10000,10000)
• 浮動小数で計算する人は注意が必要

More Related Content

What's hot

AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Inc.
 
AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Inc.
 
AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Inc.
 
AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Inc.
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Inc.
 
AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説AtCoder Inc.
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Inc.
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Inc.
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Inc.
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Inc.
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Inc.
 
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Inc.
 
AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Inc.
 
AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説AtCoder Inc.
 
AtCoder Regular Contest 035 解説
AtCoder Regular Contest 035 解説AtCoder Regular Contest 035 解説
AtCoder Regular Contest 035 解説AtCoder Inc.
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Inc.
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Inc.
 
CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説AtCoder Inc.
 

What's hot (20)

AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
 
AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説
 
AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説AtCoder Beginner Contest 022 解説
AtCoder Beginner Contest 022 解説
 
AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説
 
Arc041
Arc041Arc041
Arc041
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説
 
AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
 
AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説AtCoder Beginner Contest 021 解説
AtCoder Beginner Contest 021 解説
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説
 
AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説
 
AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説
 
AtCoder Regular Contest 035 解説
AtCoder Regular Contest 035 解説AtCoder Regular Contest 035 解説
AtCoder Regular Contest 035 解説
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説
 
abc027
abc027abc027
abc027
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
 
CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説
 

Viewers also liked

AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Inc.
 
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)AtCoder Inc.
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Inc.
 
CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…Hiromu Yakura
 
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjpcocodrips
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoder Inc.
 
競技プログラミングについて
競技プログラミングについて競技プログラミングについて
競技プログラミングについてei ushi
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Inc.
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説AtCoder Inc.
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Inc.
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説AtCoder Inc.
 
2011 02-21 第1回@freaks勉強会
2011 02-21 第1回@freaks勉強会2011 02-21 第1回@freaks勉強会
2011 02-21 第1回@freaks勉強会YuichiroMukai
 

Viewers also liked (19)

abc032
abc032abc032
abc032
 
abc031
abc031abc031
abc031
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説
 
CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…
 
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
強くなるためのプログラミング -プログラミングに関する様々なコンテストとそのはじめ方-#pyconjp
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
競技プログラミングについて
競技プログラミングについて競技プログラミングについて
競技プログラミングについて
 
arc047
arc047arc047
arc047
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説
 
AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
 
At corder005
At corder005At corder005
At corder005
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
 
2011 02-21 第1回@freaks勉強会
2011 02-21 第1回@freaks勉強会2011 02-21 第1回@freaks勉強会
2011 02-21 第1回@freaks勉強会
 
初めてのプロコン
初めてのプロコン初めてのプロコン
初めてのプロコン
 
DP特集
DP特集DP特集
DP特集
 
蟻本輪講 データ構造
蟻本輪講 データ構造蟻本輪講 データ構造
蟻本輪講 データ構造
 

Similar to AtCoder Beginner Contest 033 解説

CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説AtCoder Inc.
 
Code Formula 予選B 解説
Code Formula 予選B 解説Code Formula 予選B 解説
Code Formula 予選B 解説AtCoder Inc.
 
CODE THANKS FESTIVAL 2014 A日程 解説
CODE THANKS FESTIVAL 2014 A日程 解説CODE THANKS FESTIVAL 2014 A日程 解説
CODE THANKS FESTIVAL 2014 A日程 解説AtCoder Inc.
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Inc.
 
AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Inc.
 
Indeedなう 予選A 解説
Indeedなう 予選A 解説Indeedなう 予選A 解説
Indeedなう 予選A 解説AtCoder Inc.
 
AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説AtCoder Inc.
 
Mastermind
MastermindMastermind
Mastermindtomerun
 

Similar to AtCoder Beginner Contest 033 解説 (8)

CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
 
Code Formula 予選B 解説
Code Formula 予選B 解説Code Formula 予選B 解説
Code Formula 予選B 解説
 
CODE THANKS FESTIVAL 2014 A日程 解説
CODE THANKS FESTIVAL 2014 A日程 解説CODE THANKS FESTIVAL 2014 A日程 解説
CODE THANKS FESTIVAL 2014 A日程 解説
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
 
AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説
 
Indeedなう 予選A 解説
Indeedなう 予選A 解説Indeedなう 予選A 解説
Indeedなう 予選A 解説
 
AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説
 
Mastermind
MastermindMastermind
Mastermind
 

More from AtCoder Inc.

Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2AtCoder Inc.
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説AtCoder Inc.
 
Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001AtCoder Inc.
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Inc.
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説AtCoder Inc.
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Inc.
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説AtCoder Inc.
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説AtCoder Inc.
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Inc.
 
天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説AtCoder Inc.
 
AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Inc.
 
天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説AtCoder Inc.
 

More from AtCoder Inc. (15)

TCO2017R1
TCO2017R1TCO2017R1
TCO2017R1
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
 
Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
 
天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説
 
AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説
 
天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説
 

Recently uploaded

東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~Kochi Eng Camp
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料Tokyo Institute of Technology
 

Recently uploaded (7)

東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 

AtCoder Beginner Contest 033 解説

  • 1. ©AtCoder Inc. All rights reserved. 1 AtCoder Beginner Contest #033 解説 AtCoder株式会社 代表取締役 高橋 直大
  • 2. ©AtCoder Inc. All rights reserved. 2 A問題 暗証番号
  • 3. ©AtCoder Inc. All rights reserved. 3 A問題 問題概要 • 4桁の数が与えられる • 各桁が全て同じ数字であるか判定せよ
  • 4. ©AtCoder Inc. All rights reserved. 4 A問題 アルゴリズム • 実際に4文字読み込み、if文などで判定すれば よい • 例: if(in[0]==in[1]&&in[1]==in[2]&&in[2]==in[3]) – 4桁とも同じ数字には法則性もある – 0000, 1111, 2222, …, 9999は全て 1111の倍数。 • 1111で割り切れるかどうかを判定してもよい • 例: if(N%1111==0)
  • 5. ©AtCoder Inc. All rights reserved. 5 B問題 町の合併
  • 6. ©AtCoder Inc. All rights reserved. 6 B問題 問題概要 • N個の町が合併し、1つの市になる。 • N個の町の合計人口の過半数以上の人口を持つ町 が存在すれば、新しい市の名前はその町の名前に する • 存在しなければ、atcoderという名前にする。 • どのような市の名前になるだろうか? • 2 ≦ N ≦ 1,000, 1 ≦ 町の人口 ≦ 100,000
  • 7. ©AtCoder Inc. All rights reserved. 7 B問題 アルゴリズム • 問題文にあるとおりに実際にループを回してシミュ レートする • 合計を計算する • それぞれの町の人口がその合計の過半数以上ある かをifで判定し、あればそれを出力 • なければatcoderと出力 • 計算量は O(N)
  • 8. ©AtCoder Inc. All rights reserved. 8 B問題 アルゴリズム • ちなみに、過半数以上の人口がある町が2つ以上存 在することはない • (2番目に多い町の人口が過半数あるとすると、1番 目と2番目の合計が全人口を超えてしまい矛盾す る)
  • 9. ©AtCoder Inc. All rights reserved. 9 1. 問題概要 2. アルゴリズム C問題 数式の書き換え
  • 10. ©AtCoder Inc. All rights reserved. 10 C問題 問題概要 • 1+2+3*4*5+6*7のような、各項が1桁で括弧がなく、 乗算と加算のみの数式が与えられる。 • これらの数字をいくつか0に書き換えて答えを0にし たい。 • 最低何個書き換えればよいか。 • 数式の長さは100,000以下
  • 11. ©AtCoder Inc. All rights reserved. 11 C問題 アルゴリズム • 各数字を0にする/しないを全て試すと O(2^N)かかる ため、間に合わない • ある場所を0に書き換えると、どこまで影響が出るだ ろうか。
  • 12. ©AtCoder Inc. All rights reserved. 12 C問題 アルゴリズム • 1*2*3の1を0にする→ 0*2*3=0 • 2*4*6の4を0にする→ 2*0*6=0 • 1+2+3の1を0にする→ 0+2+3 • 3*6+9の6を0にする→ 3*0+9=0+9 • 1+2*3+4の2を0にする→1+0*3+4=1+0+4
  • 13. ©AtCoder Inc. All rights reserved. 13 C問題 アルゴリズム • *だけで繋がっている式のどこかに0があると、その 範囲の答えが0になる • 0と書かれた項は+を越えた場所には影響しない • 元の数式の答えを0にするには、+で区切られたそ れぞれの部分の答えを全て0にしなければならない • 要は、+で区切られた部分それぞれに最低1つの0の 項が欲しい
  • 14. ©AtCoder Inc. All rights reserved. 14 C問題 アルゴリズム • +で区切る • 区切ったそれぞれの部分に対して、初期状態で0が 1つもなければ、1回書き換えが必要 • この合計が必要な最小個数になる • O(N)
  • 15. ©AtCoder Inc. All rights reserved. 15 D問題 三角形の分類 1. 問題概要 2. アルゴリズム
  • 16. ©AtCoder Inc. All rights reserved. 16 D問題 問題概要 • 座標平面上の点 (x[i],y[i]) がN個与えられる。 • N個のうち3つ選んで三角形を作ったとき、それが鋭 角三角形、直角三角形、鈍角三角形になるものを、 それぞれ数える。 • N ≦ 2,000 • 部分点: N ≦ 100
  • 17. ©AtCoder Inc. All rights reserved. 17 D問題 アルゴリズム • 部分点解法 • 3点を全部選んで角度を計算する • 角度が 0°より大きく90°より小さいか、90°に等し いか、90°より大きく180°より小さいかの3種類を 分類できればよいので、内積を使ってもよい • ベクトル(a,b)と(c,d)のなす角θが – 0° < θ < 90°のとき ac+bd > 0 – θ = 90°のとき ac+bd = 0 – 90° < θ < 180° のとき ac+bd < 0
  • 18. ©AtCoder Inc. All rights reserved. 18 D問題 アルゴリズム • さっきの方法だと計算量は O(N^3) • 部分点は間に合うが、 満点はとれない • これ以上早く計算するには、複数の三角形をまとめ て数える必要がある
  • 19. ©AtCoder Inc. All rights reserved. 19 D問題 アルゴリズム • 三角形の特徴に注目する • 直角三角形は、1個が直角、他は鋭角 • 鈍角三角形は、1個が鈍角、他は鋭角 • 直角、鈍角となる∠ABCの組の個数を求めれば、直 角三角形、鈍角三角形の個数が分かり、全体から 引くと鋭角三角形の個数も計算できる。
  • 20. ©AtCoder Inc. All rights reserved. 20 D問題 アルゴリズム • ∠ABCのBの部分を固定して、A,Cの組を数えること にする • ある点から他の全ての点に対して半直線を引くとこ うなる (プログラムでは、角度だけをもてばよい。角 度はatan2等で計算できる。)
  • 21. ©AtCoder Inc. All rights reserved. 21 D問題 アルゴリズム • これらの角度をソートし、左側を固定する – どこまでが90°未満だろう? – どこまでが90°だろう? – どこまでが180°未満だろう? • これらは二分探索やしゃくとり法でまとめて高速に 計算できる。二分探索ではO(N log N)、尺取だと O(N) • ただし環状になっているので、角度の扱いは少し複 雑で気をつける必要がある。(2周分配列をもったり、 内積・外積で求めると楽かもしれない)
  • 22. ©AtCoder Inc. All rights reserved. 22 D問題 アルゴリズム • 全体をまとめると – 一点選ぶ – そこから他の全て点へのベクトルの角度を求め、ソートす る。 – 二分探索やしゃくとり法で鈍角、直角の個数を数える – 鋭角三角形の個数を、全体から鈍角、直角の個数を引く ことで求める • 計算量は合計で O(N^2 logn) (しゃくとり法の場合)
  • 23. ©AtCoder Inc. All rights reserved. 23 D問題 アルゴリズム • 注意 • 2つのベクトルのなす角度が非常に小さかったり、非 常に90°に近かったり、非常に180°に近かったり することがある。 例1: (-10000,-10000), (-10000,-9999),(10000,10000) 例2: (-10000,-10000), (-9999,10000),(10000,9999) 例3: (-10000,-10000), (1,0),(10000,10000) • 浮動小数で計算する人は注意が必要