SlideShare a Scribd company logo
Codeforces Round #219 Div1 E
Drawing Circles is Fun 解説
DEGwer
問題概要
• 平面上にN点が与えられます
• N点のうちどの2点A,Bをとっても、原点をOと
するとO,A,Bは同一直線状に並びません
• また、与えられる点の集合はは原点を含みませ
ん
• N<=1000
問題概要
• 次のような条件を満たす、点のペアの集合の個
数をmod 10^9+7で数えてください
• すべてのペアに属する点は与えられた点集合に
属しており、重複がない
• 任意のペアのペア(A_i,B_i),(A_j,B_j)に対し、
三角形OA_iB_iの外接円と三角形OA_jB_jの外
接円は一点で接し、また三角形OA_iB_jの外接
円と三角形OA_jB_iの外接円は一点で接する
反転
• 世の中には反転という操作がある
• 原点から距離tにある点を原点中心に、反転半径
1で反転するという操作は、原点に対する方向を
たもちつつ距離を1/tにするという操作
• これを行うと、(x,y)という点は
(x/(x^2+y^2),y/(x^2+y^2))となる
反転
• この操作を平面全体に行うと、原点を通る円が
原点を通らない直線にうつる
• 今回この問題で考えたい円は原点を通る円だけ
なので、この操作で直線を扱う問題に帰着でき
る
反転
• “任意のペアのペア(A_i,B_i),(A_j,B_j)に対し、
三角形OA_iB_iの外接円と三角形OA_jB_jの外
接円は一点で接し、また三角形OA_iB_jの外接
円と三角形OA_jB_iの外接円は一点で接する”と
いう条件はどう言い換えられるか?
反転
• 原点で互いに接する円は反転によって平行な直
線にうつる
• よって、この(A_i,B_i),(A_j,B_j)が満たすべき
条件は、反転後の座標で「四角形A_iB_iA_jB_j
が平行四辺形となる」ということになる
平行四辺形
• では、四角形A_iB_iA_jB_jが平行四辺形になる
ための条件とは?
• 対角線の中点が一致することが、平行四辺形で
あるための必要十分条件
解法
• 反転したあと、すべての2点の組について、対角
線の中点を全列挙
• これらが一致するような2点の組を集めてきて、
そのなかでごにょごにょして足すと答えが求ま
る
注意点
• 問題文には、「一点で接する」と書いてある
• よって、中点が一致しても4点が同一直線上に
乗っていたらアウト
• この場合を加味していない提出が多くみられま
した
解法
• この事実より、対角線の中点が一致するような2
点の組の集合の中で、さらに4点が同一直線上に
並ぶようなものを省かなければいけない
• これは適当にかけざんをすると求まるので、全
体でO(N^2log N)(同じものをまとめるときに
ソートするため)の時間でこの問題が解ける
余談
• りんごさん、hosさん、Egorさんその他強い人
がpretest 5でWAを出していて、かつその出力が
すべて同じだったので相当びびった
• 正解者が2人でDiv1Eにちょうどいい難易度だっ
たと思います(小並感)

More Related Content

What's hot

Division
DivisionDivision
Divisionoupc
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
AtCoder Inc.
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
AtCoder Inc.
 
Problem F
Problem FProblem F
Problem F
Yohei Ito
 
関数型プログラミングとモナド
関数型プログラミングとモナド関数型プログラミングとモナド
関数型プログラミングとモナド
Masayuki Isobe
 
Summer seminar
Summer seminarSummer seminar
Summer seminar
Eita Sugimoto
 
Rabitt challenge mathematics
Rabitt challenge mathematicsRabitt challenge mathematics
Rabitt challenge mathematics
TakumaYamauchi1
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
AtCoder Inc.
 

What's hot (8)

Division
DivisionDivision
Division
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
Problem F
Problem FProblem F
Problem F
 
関数型プログラミングとモナド
関数型プログラミングとモナド関数型プログラミングとモナド
関数型プログラミングとモナド
 
Summer seminar
Summer seminarSummer seminar
Summer seminar
 
Rabitt challenge mathematics
Rabitt challenge mathematicsRabitt challenge mathematics
Rabitt challenge mathematics
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 

More from DEGwer

Cf219 d1d
Cf219 d1dCf219 d1d
Cf219 d1dDEGwer
 
Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説DEGwer
 
Good Sequences
Good SequencesGood Sequences
Good SequencesDEGwer
 
Escape from Stones
Escape from StonesEscape from Stones
Escape from StonesDEGwer
 
Escape from stones
Escape from stonesEscape from stones
Escape from stonesDEGwer
 
素数判定法
素数判定法素数判定法
素数判定法DEGwer
 

More from DEGwer (6)

Cf219 d1d
Cf219 d1dCf219 d1d
Cf219 d1d
 
Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説
 
Good Sequences
Good SequencesGood Sequences
Good Sequences
 
Escape from Stones
Escape from StonesEscape from Stones
Escape from Stones
 
Escape from stones
Escape from stonesEscape from stones
Escape from stones
 
素数判定法
素数判定法素数判定法
素数判定法
 

Cf219 d1e