狠狠撸
Submit Search
AtCoder Beginner Contest 033 解説
?
2 likes
?
11,227 views
A
AtCoder Inc.
Follow
AtCoder Beginner Contest 033 解説
Read less
Read more
1 of 23
Download now
Downloaded 21 times
More Related Content
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) ? 浮動小数で計算する人は注意が必要
Download