SlideShare a Scribd company logo
Sliding GCD
  原案 : fura2
 解答 : lyoz, fura2
  解説 : fura2
問題概要
●   1, 2, 3, …, N と自然数が並んでいる。
    連続する W 個 ( i, i+1, …, i+W-1 ) に注目する

●   W 個から好きなだけ選んで GCD (最大公約数) を
    計算する

●   GCD の値としてありうる数は何種類あるか?
    すべての i について求めよ
解法
●   とりあえず i を固定したときを考える。
    S := { i, i+1, …, i+W-1 } とおく

●   S から部分集合 T を選んだとする。
    GCD(T) としてどんな数が作れるだろうか?
解法
●   もちろん i, i+1, …, i+W-1 は作れる。( |T| = 1 の
    ケース )

●   それ以外については、実は次がいえる :
    d が作れる ⇔ S が d の倍数を二つ以上含む

●   このことから、i, i+1, …, i+W-1 の約数を全部列挙
    して、二回以上現れる数を数えれば答えがわかる
解法
    d が作れる ⇔ { i, i+1, …, i+W-1 } が d の倍数を二つ以上含む

●   証明
    (⇒) 明らか
    (<=)
      { i, i+1, …, i+W-1 } に含まれる連続する d の倍数を
      kd, (k+1)d とすると、
           GCD(kd, (k+1)d) = d・GCD(k, k+1) = d
      となるからOK
解法
●   次に i を動かす
●   約数の個数を
        cnt[d] := ( d を約数にもつ数がいくつあるか )
    という配列で管理する
●   i++ すると、考慮すべき数から i が消えて i+W が
    増える
    ➔   なので、cnt の更新があるのは i の約数と i+W の約数
        だけ
    ➔   毎回約数を計算しなおしても、全体で O(n^1.5) となり
        間に合う
ちなみに
●   O(n log n) でも解けます

●   興味がある人は考えてみてください
提出状況
●   AC Rate
    –   26.53 % (13/49)


●   First Acceptance
    –   Onsite: magyorin (26 min)
    –   All: magyorin (26 min)

More Related Content

What's hot

構造化オーバーレイネットワークを用いた条件付きマルチキャストの提案
構造化オーバーレイネットワークを用いた条件付きマルチキャストの提案構造化オーバーレイネットワークを用いた条件付きマルチキャストの提案
構造化オーバーレイネットワークを用いた条件付きマルチキャストの提案
Kota Abe
 
Ninja of Train
Ninja of TrainNinja of Train
Ninja of Traintomerun
 
K2PC Div1 E 暗号化
K2PC Div1 E 暗号化K2PC Div1 E 暗号化
K2PC Div1 E 暗号化Kazuma Mikami
 
公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号
Joe Suzuki
 
Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方
Masaru Watanabe
 
Rsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしいRsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしいYosuke Onoue
 
情報オリンピック夏合宿発表
情報オリンピック夏合宿発表情報オリンピック夏合宿発表
情報オリンピック夏合宿発表
Kazuma Mikami
 
ナップサックDPを説明してみた
ナップサックDPを説明してみたナップサックDPを説明してみた
ナップサックDPを説明してみた
Koya Fukuda
 
DP特集
DP特集DP特集
DP特集
Dai Hamada
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
AtCoder Inc.
 
RUPC2014_Day2_K
RUPC2014_Day2_KRUPC2014_Day2_K
RUPC2014_Day2_Ks1190048
 
md5のアルゴリズム
md5のアルゴリズムmd5のアルゴリズム
md5のアルゴリズムaomori ringo
 
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説
AtCoder Inc.
 
橫手 数学班スライド
橫手 数学班スライド橫手 数学班スライド
橫手 数学班スライド
awokumo
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説DEGwer
 
Ml ch7
Ml ch7Ml ch7
Ijpc2015 2-a ioiウエハース
Ijpc2015 2-a ioiウエハースIjpc2015 2-a ioiウエハース
Ijpc2015 2-a ioiウエハース
reew2n
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
AtCoder Inc.
 
TopCoder SRM614 解説
TopCoder SRM614 解説TopCoder SRM614 解説
TopCoder SRM614 解説
EmKjp
 

What's hot (20)

構造化オーバーレイネットワークを用いた条件付きマルチキャストの提案
構造化オーバーレイネットワークを用いた条件付きマルチキャストの提案構造化オーバーレイネットワークを用いた条件付きマルチキャストの提案
構造化オーバーレイネットワークを用いた条件付きマルチキャストの提案
 
Ninja of Train
Ninja of TrainNinja of Train
Ninja of Train
 
K2PC Div1 E 暗号化
K2PC Div1 E 暗号化K2PC Div1 E 暗号化
K2PC Div1 E 暗号化
 
公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号公開鍵暗号1: RSA暗号
公開鍵暗号1: RSA暗号
 
Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方Sclalaz Kleisli の使い方
Sclalaz Kleisli の使い方
 
Rsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしいRsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしい
 
情報オリンピック夏合宿発表
情報オリンピック夏合宿発表情報オリンピック夏合宿発表
情報オリンピック夏合宿発表
 
ナップサックDPを説明してみた
ナップサックDPを説明してみたナップサックDPを説明してみた
ナップサックDPを説明してみた
 
DP特集
DP特集DP特集
DP特集
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
 
RUPC2014_Day2_K
RUPC2014_Day2_KRUPC2014_Day2_K
RUPC2014_Day2_K
 
md5のアルゴリズム
md5のアルゴリズムmd5のアルゴリズム
md5のアルゴリズム
 
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説
 
橫手 数学班スライド
橫手 数学班スライド橫手 数学班スライド
橫手 数学班スライド
 
Convex Hull Trick
Convex Hull TrickConvex Hull Trick
Convex Hull Trick
 
Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説Joi模擬予選2013 6番解説
Joi模擬予選2013 6番解説
 
Ml ch7
Ml ch7Ml ch7
Ml ch7
 
Ijpc2015 2-a ioiウエハース
Ijpc2015 2-a ioiウエハースIjpc2015 2-a ioiウエハース
Ijpc2015 2-a ioiウエハース
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 
TopCoder SRM614 解説
TopCoder SRM614 解説TopCoder SRM614 解説
TopCoder SRM614 解説
 

Viewers also liked

Kth
KthKth
Kthoupc
 
Sort
SortSort
Sortoupc
 
Cube
CubeCube
Cubeoupc
 
One
OneOne
Oneoupc
 
Permutation
PermutationPermutation
Permutationoupc
 
Paren
ParenParen
Parenoupc
 
Palin
PalinPalin
Palinoupc
 
Goto
GotoGoto
Gotooupc
 
Rmq
RmqRmq
Rmqoupc
 
Trip
TripTrip
Tripoupc
 
Segpair
SegpairSegpair
Segpairoupc
 
Sharp2sat
Sharp2satSharp2sat
Sharp2satoupc
 
Replace
ReplaceReplace
Replaceoupc
 
Comment
CommentComment
Commentoupc
 
Magical
MagicalMagical
Magicaloupc
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
Yoichi Iwata
 

Viewers also liked (16)

Kth
KthKth
Kth
 
Sort
SortSort
Sort
 
Cube
CubeCube
Cube
 
One
OneOne
One
 
Permutation
PermutationPermutation
Permutation
 
Paren
ParenParen
Paren
 
Palin
PalinPalin
Palin
 
Goto
GotoGoto
Goto
 
Rmq
RmqRmq
Rmq
 
Trip
TripTrip
Trip
 
Segpair
SegpairSegpair
Segpair
 
Sharp2sat
Sharp2satSharp2sat
Sharp2sat
 
Replace
ReplaceReplace
Replace
 
Comment
CommentComment
Comment
 
Magical
MagicalMagical
Magical
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 

More from oupc

Knapsack
KnapsackKnapsack
Knapsackoupc
 
Game
GameGame
Gameoupc
 
Four op
Four opFour op
Four opoupc
 
Divisor
DivisorDivisor
Divisoroupc
 
Division
DivisionDivision
Divisionoupc
 
Anagram
AnagramAnagram
Anagramoupc
 
Comment
CommentComment
Commentoupc
 

More from oupc (8)

Knapsack
KnapsackKnapsack
Knapsack
 
Game
GameGame
Game
 
Four op
Four opFour op
Four op
 
Divisor
DivisorDivisor
Divisor
 
Division
DivisionDivision
Division
 
Anagram
AnagramAnagram
Anagram
 
A
AA
A
 
Comment
CommentComment
Comment
 

Gcd

  • 1. Sliding GCD 原案 : fura2 解答 : lyoz, fura2 解説 : fura2
  • 2. 問題概要 ● 1, 2, 3, …, N と自然数が並んでいる。 連続する W 個 ( i, i+1, …, i+W-1 ) に注目する ● W 個から好きなだけ選んで GCD (最大公約数) を 計算する ● GCD の値としてありうる数は何種類あるか? すべての i について求めよ
  • 3. 解法 ● とりあえず i を固定したときを考える。 S := { i, i+1, …, i+W-1 } とおく ● S から部分集合 T を選んだとする。 GCD(T) としてどんな数が作れるだろうか?
  • 4. 解法 ● もちろん i, i+1, …, i+W-1 は作れる。( |T| = 1 の ケース ) ● それ以外については、実は次がいえる : d が作れる ⇔ S が d の倍数を二つ以上含む ● このことから、i, i+1, …, i+W-1 の約数を全部列挙 して、二回以上現れる数を数えれば答えがわかる
  • 5. 解法 d が作れる ⇔ { i, i+1, …, i+W-1 } が d の倍数を二つ以上含む ● 証明 (⇒) 明らか (<=) { i, i+1, …, i+W-1 } に含まれる連続する d の倍数を kd, (k+1)d とすると、 GCD(kd, (k+1)d) = d・GCD(k, k+1) = d となるからOK
  • 6. 解法 ● 次に i を動かす ● 約数の個数を cnt[d] := ( d を約数にもつ数がいくつあるか ) という配列で管理する ● i++ すると、考慮すべき数から i が消えて i+W が 増える ➔ なので、cnt の更新があるのは i の約数と i+W の約数 だけ ➔ 毎回約数を計算しなおしても、全体で O(n^1.5) となり 間に合う
  • 7. ちなみに ● O(n log n) でも解けます ● 興味がある人は考えてみてください
  • 8. 提出状況 ● AC Rate – 26.53 % (13/49) ● First Acceptance – Onsite: magyorin (26 min) – All: magyorin (26 min)