SlideShare a Scribd company logo
1 of 19
幾何恐怖症を
そろそろ
なんとか
しましょう
ICPC国内予選直前対策会議
2012/06/30
自己紹介
 @tayama0324   (Takashi Tayama)
    会津大 -> 会津大院 -> 会社員
    ICPC2006-2010 Contestant
    OB/OG会メンバー
    元AOJ管理人お手伝い
アンケート
 幾何好きですか?
幾何問題の95%は
1.   最終防衛問題
        ->
2.   ライブラリをコピペするだけ
        ->
幾何問題の95%は
1.   最終防衛問題
        -> あきらめる
2.   ライブラリをコピペするだけ
        -> 絶対に解く!!!
手を出してはいけない幾何の例
 2007   Domestic: くるくる
    AOJ1151
    回すだけ
解くべき幾何の例
   2009 Regional (Tokyo): Separate Points
       AOJ1298
       凸包 + 交差判定 するだけ
解くべき幾何の例
   2006 Regional (Yokohama)
    How I Mathematician Wonder What You Are
       AOJ1267
       凸包 +
        凸多角形の切断
       やるだけ
解くべき幾何の例
 2007   Regional (Tokyo): Geometric Map
    AOJ1279
    線分アレンジメント (+最短経路)
      線分集合を
      グラフに見立てる
    基本的な関数を
     組み合わせて
     やるだけ
日本ICPCの幾何の傾向
 国内予選
    最終防衛幾何は毎年出題されている
    解ける幾何はあまり出題されない
      2008:   大玉転がし (AOJ1157) ぐらい
 アジア地区予選
    解ける幾何・最終防衛幾何 1 問ずつ程度
      ここ2年は減少傾向?

 世界的に見ても日本の幾何は多く難しい
 OB会の練習会では頻出
日本ICPCの幾何の傾向
   最近は減少傾向にあるものの、
    ライブラリさえあれば
    短時間で簡単に解ける問題が頻出
       模擬予選やその他のコンテストでも
   幾何ライブラリを作りましょう!
       ライブラリを作る時間は無制限
       オンラインジャッジを埋めるのにも便利
       最終防衛に挑むのにもやっぱりライブラリは必要
       これはもう作るしか!
ライブラリの作り方
1.   どんな関数を作る?
2.   どうやって実装する?
3.   どうやってテストする?
どんな関数を作る?
 例:   私のライブラリ
    内積・外積        多角形と点の包含判定
    ccw          {直線,線分}と線分の交差判定
    3点のなす角度      線分と{線分,点}の距離
    線分の交点        2円の共通{内接線,外接線}
    多角形の面積
    凸多角形の切断
    凸包
どうやって作る?
 偉い人のコードを丸写し!
    やめましょう
    十分テストしたはずのライブラリが
     コンテスト本番になってバグることも
    自分が使うライブラリがどう動いてるのか
     理解しておきましょう
      でないとデバッグできない
どうやって作る?
 ぼくのかんがえたさいきょうのライブラリを
つくろう!
    勉強になるのでとても良いです
    一方、下手に作ると
      関数どうしの依存関係が複雑になったり
      誤差に弱かったり

 偉い人のライブラリはよくできている
    敬意を払って参考にしつつ、自分好みに改造す
     るのも良い
偉い人
 Spaghetti   Source (前原さん)
    http://www.prefield.com/algorithm/inde
     x.html
 kkntkr   / Unknown wiki (にゃあさん)
    http://nya3.jp/libicpc/

 おまけ:     私のライブラリ
    https://www.dropbox.com/sh/yw0hqjrln2b
     fv55/BxqvPOwQoJ/geometry.cpp
おまけ: 複素平面
 2次元幾何は複素数を使って実装されること
 が多い (C++)
    typedef std::complex<double> Point;
 メリット
    四則演算子がオーバーロードされている
      加減算はベクトルの足し引きなどに
      乗除算は点の回転になどに便利

 CやJavaでは自前で実装することが多い
どうやってテストする?
 作ったライブラリが正しく動くことを確信す
るために、入念なテストは必須
 偉い人は検証に使ったオンラインジャッジの
  問題番号をメモしてくれている
 ランダム入力を大量に作るのもよい


 どんなに入念にテストしても、本番では1%ぐ
らいライブラリを疑っておきましょう
まとめ
 ライブラリの力で本番での労力をぐっと減ら
 せるのが幾何の醍醐味
 ライブラリは気合と根性と時間があれば誰に
  でも作れます
 レッツ幾何!

More Related Content

Viewers also liked

Viewers also liked (20)

第20局局務會議紀錄
第20局局務會議紀錄第20局局務會議紀錄
第20局局務會議紀錄
 
Brico supresión de olores en aire acondicionado
Brico supresión de olores en aire acondicionadoBrico supresión de olores en aire acondicionado
Brico supresión de olores en aire acondicionado
 
Medical intelligence vanuit de medisch professional - Harold Mous
Medical intelligence vanuit de medisch professional - Harold Mous Medical intelligence vanuit de medisch professional - Harold Mous
Medical intelligence vanuit de medisch professional - Harold Mous
 
Presentatie Stijn Oosterlynck (19 jun 2012)
Presentatie Stijn Oosterlynck (19 jun 2012)Presentatie Stijn Oosterlynck (19 jun 2012)
Presentatie Stijn Oosterlynck (19 jun 2012)
 
Funcionamento da biblioteca
Funcionamento da  bibliotecaFuncionamento da  biblioteca
Funcionamento da biblioteca
 
Zaczynamy
ZaczynamyZaczynamy
Zaczynamy
 
Jasa Sewa Aula
Jasa Sewa AulaJasa Sewa Aula
Jasa Sewa Aula
 
infoFLOW - struktura systemu i funkcje
infoFLOW - struktura systemu i funkcjeinfoFLOW - struktura systemu i funkcje
infoFLOW - struktura systemu i funkcje
 
Wellness by oriflame_(natalia_lesnikovskaya)
Wellness by oriflame_(natalia_lesnikovskaya)Wellness by oriflame_(natalia_lesnikovskaya)
Wellness by oriflame_(natalia_lesnikovskaya)
 
Zaragoza
Zaragoza Zaragoza
Zaragoza
 
Tecnologia ii
Tecnologia iiTecnologia ii
Tecnologia ii
 
Lugares
LugaresLugares
Lugares
 
追寻现代(三卷合集)
追寻现代(三卷合集)追寻现代(三卷合集)
追寻现代(三卷合集)
 
Upsr jpnm percubaan k 2 2011
Upsr jpnm percubaan  k 2 2011Upsr jpnm percubaan  k 2 2011
Upsr jpnm percubaan k 2 2011
 
Slideshow Twitter Anmeldung
Slideshow Twitter AnmeldungSlideshow Twitter Anmeldung
Slideshow Twitter Anmeldung
 
19
1919
19
 
Apresentação - Elaboração de Projetos
Apresentação - Elaboração de ProjetosApresentação - Elaboração de Projetos
Apresentação - Elaboração de Projetos
 
Sistema bajar peso 30 dias
Sistema bajar peso 30 diasSistema bajar peso 30 dias
Sistema bajar peso 30 dias
 
Perez reverte
Perez revertePerez reverte
Perez reverte
 
Advisory on deferred action for dreamers
Advisory on deferred action for dreamersAdvisory on deferred action for dreamers
Advisory on deferred action for dreamers
 

Similar to TeamLabLT20120630

ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューMoriharu Ohzu
 
【解説】JOI 2019/2020 一次予選 最速非公式解説【競技プログラミング】
【解説】JOI 2019/2020 一次予選 最速非公式解説【競技プログラミング】【解説】JOI 2019/2020 一次予選 最速非公式解説【競技プログラミング】
【解説】JOI 2019/2020 一次予選 最速非公式解説【競技プログラミング】Proktmr
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとはTakuya Akiba
 
Bayesian Sushistical Modeling
Bayesian Sushistical ModelingBayesian Sushistical Modeling
Bayesian Sushistical Modelingdaiki hojo
 
型無しラムダ計算―OCamlによる実装―
型無しラムダ計算―OCamlによる実装―型無しラムダ計算―OCamlによる実装―
型無しラムダ計算―OCamlによる実装―Proktmr
 
Introduction to YOLO detection model
Introduction to YOLO detection modelIntroduction to YOLO detection model
Introduction to YOLO detection modelWEBFARMER. ltd.
 
英語授業を見つめ直す方法: テストデータの見方を知ろう
英語授業を見つめ直す方法: テストデータの見方を知ろう英語授業を見つめ直す方法: テストデータの見方を知ろう
英語授業を見つめ直す方法: テストデータの見方を知ろうKen Urano
 

Similar to TeamLabLT20120630 (8)

ソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビューソースコードの品質向上のための効果的で効率的なコードレビュー
ソースコードの品質向上のための効果的で効率的なコードレビュー
 
Coding Interview
Coding InterviewCoding Interview
Coding Interview
 
【解説】JOI 2019/2020 一次予選 最速非公式解説【競技プログラミング】
【解説】JOI 2019/2020 一次予選 最速非公式解説【競技プログラミング】【解説】JOI 2019/2020 一次予選 最速非公式解説【競技プログラミング】
【解説】JOI 2019/2020 一次予選 最速非公式解説【競技プログラミング】
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
Bayesian Sushistical Modeling
Bayesian Sushistical ModelingBayesian Sushistical Modeling
Bayesian Sushistical Modeling
 
型無しラムダ計算―OCamlによる実装―
型無しラムダ計算―OCamlによる実装―型無しラムダ計算―OCamlによる実装―
型無しラムダ計算―OCamlによる実装―
 
Introduction to YOLO detection model
Introduction to YOLO detection modelIntroduction to YOLO detection model
Introduction to YOLO detection model
 
英語授業を見つめ直す方法: テストデータの見方を知ろう
英語授業を見つめ直す方法: テストデータの見方を知ろう英語授業を見つめ直す方法: テストデータの見方を知ろう
英語授業を見つめ直す方法: テストデータの見方を知ろう
 

TeamLabLT20120630