Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
第2回  早稲⽥田⼤大学プログラミングコンテスト    I: その味は⽢甘くて    keyword: ハニカム座標、数学、累累積和
問題概要        1       1       1                   1       1       1                   1       1       1    1       1       1...
問題概要       +y            +x
問題概要
問題概要       糖度度 : 1
問題概要                  糖度度 : 1                  糖度度 : 2       [!] 重なる巣の糖度度は元々の合計
問題概要       糖度度 : 1       糖度度 : 2       糖度度 : 3
問題概要                   糖度度 : 1                   糖度度 : 2最も⽢甘い部分の糖度度を答えてください。                 糖度度 : 3
部分点(10pt)制約¤  制約  ¤  巣の数 <= 100  ¤  |巣の位置(x,y)| <= 100  ¤  巣の⼤大きさ <= 100  ¤  タイプ1のみ
部分点(10pt)解法¤  1つの巣につき、含まれる六六⾓角形の数は... ¤  1 + (6 + 12 + .. + 594) ≒ 30,000¤  よって、勘定すべき六六⾓角形の数は ¤  30,000 * 100(巣の数) = 3...
部分点(10pt)解法¤  [!] 配列列のサイズに注意¤  巣の位置は絶対値で100 以下なので・・・  ¤  最⼩小で -200、最⼤大で 200 の位置まで⽢甘さが及ぶ可能性がある¤  念念のため+250の下駄を履履かせて、500...
部分点(50pts)制約¤  制約  ¤  巣の数 <= 10,000  ¤  |巣の位置(x,y)| <= 500  ¤  巣の⼤大きさ <= 500  ¤  タイプ1のみ¤  巣の数が多いので、愚直に数えたら間に合わない  ¤...
部分点(50pts)解法¤  「累累積和」というテクを使うことで計算量量を減らせます。 ¤  巣の数だけ⾏行行なっていた「区間の塗りつぶし」の操作を、     最後に⼀一気にやる
累累積和の例例¤  四⾓角形の場合
累累積和の例例¤  四⾓角形の場合
累累積和の例例¤  四⾓角形の場合
累累積和の例例¤  四⾓角形の場合
累累積和の例例¤  四⾓角形の場合
累累積和の例例¤  四⾓角形の場合              4点に対する操作              ↓              下に向けて⼀一気に⾜足す              ↓              右に向けて⼀一気に⾜足す
六六⾓角形で累累積和・・・?
六六⾓角形で累累積和・・・?
六六⾓角形で累累積和・・・?
六六⾓角形で累累積和・・・?
六六⾓角形で累累積和・・・?
六六⾓角形で累累積和・・・?
六六⾓角形で累累積和・・・?
六六⾓角形で累累積和・・・?             完  成  !
考慮すべき点の位置            中⼼心 : x,y            巣のサイズ : r            (x-r+1, y)            (x-r,y+r-1)            (x+1, y-r+1)  ...
考慮すべき点の位置            中⼼心 : x,y            巣のサイズ : r            (x-r+2, y)            (x-r+1,y+r)            (x+1, y-r)    ...
部分点(50pts)解法まとめ¤  準備パート  ¤  各巣に対して      ¤  さっきの12点に+1 or -1の操作をする¤  累累積和パート  ¤  右上 : (0, +1) に⼀一気に⾜足す  ¤  右下 : (+1, ...
満点制約¤  制約  ¤  50ptsと同じ¤  巣の種類の追加  : タイプ2  ¤  ⼀一様ではなく、右図のように      中⼼心に向かうほど糖度度が増すタイプ                                   ...
満点制約¤  制約  ¤  50ptsと同じ¤  巣の種類の追加 : タイプ3  ¤  中⼼心からの距離離の”近さ”によって      糖度度が⼆二乗になるタイプ                                   1 ...
解法 : タイプ2を攻略略する        ¤  タイプ2の巣は、タイプ1の巣が複数集まったものと考える        1       1       1                       1       1       1   ...
解法 : タイプ2を攻略略する      +      +
解法 : タイプ2を攻略略する 打ち消しあう  x6         +    +
解法 : タイプ2を攻略略する 打ち消しあう x6             打ち消しあう x6        +         +
解法 : タイプ2を攻略略する 打ち消しあう  x6              打ち消しあう  x6         +          +                           打ち消しあう
解法 : タイプ2を攻略略する      結局 ⇒
タイプ1より簡単な形にできた!
解法 : タイプ3を攻略略する        ¤  タイプ2同様、同じ形(パターン)の合計に直す!        1       1       1                       1       1       1    1  ...
解法 : タイプ3を攻略略する        1       1       1                       1       1       1    1       3       3       1             ...
解法 : タイプ3を攻略略する     +      =
解法 : タイプ3を攻略略する¤  各サイズについてのパターンを合計すると・・・         +          +                             打ち消しあう
解法 : タイプ3を攻略略する      結局 ⇒
複雑な形になった           : -2   : -1           : +2   : +1
複雑な形になった           当然、タイプ3の巣が出る度度に           このような操作を           逐次⾏行行なっていくのは不不可能。           (サイズが⼤大きくなると⼤大変)
そこで
このように考える
最後に累累積和をとって⾜足せばいい             右⽅方向の累累積和                 ⇒他の2⽅方向についても同様。
タイプ3攻略略まとめ        1       1       1           タイプ3出現の度度に                                    下記の計18点に対して、    1       4     ...
満点解法まとめ¤  累累積和配列列Aと、累累積和配列列B x 3(各⽅方向に対応) を⽤用意する¤  各巣に対して、タイプとサイズに対応する操作を⾏行行う  ¤  タイプ1 or タイプ2 のときは、A に対する操作をする      ¤...
類題¤  過去にいくつも出ています。 ¤  WUPC2012/F : 最後の問題     ¤  ⻑⾧長⽅方形に含まれる点の数を累累積和で出す ¤  第11回  情報オリンピック本戦/4: 釘(NAILS)    ¤  三⾓角形で累累積...
統計¤  First AC : hos.lyric* (24:26)¤  正解数 : 4   ¤  通した⼈人(4/205) : 2%   ¤  ACだった解答(4/55) : 7%
Upcoming SlideShare
Loading in …5
×

WUPC2nd I問題

972 views

Published on

第2回 早稲田大学プログラミングコンテストのI問題 : その味は甘くて の解説スライドです。

Published in: Technology
  • Login to see the comments

WUPC2nd I問題

  1. 1. 第2回  早稲⽥田⼤大学プログラミングコンテスト I: その味は⽢甘くて keyword: ハニカム座標、数学、累累積和
  2. 2. 問題概要 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 4 4 11 1 1 1 1 1 2 3 2 1 1 4 9 4 1 1 1 1 1 1 2 2 1 1 4 4 1 1 1 1 1 1 1 1 1 1 タイプ1 タイプ2 タイプ3 : 巣の中⼼心
  3. 3. 問題概要 +y +x
  4. 4. 問題概要
  5. 5. 問題概要 糖度度 : 1
  6. 6. 問題概要 糖度度 : 1 糖度度 : 2 [!] 重なる巣の糖度度は元々の合計
  7. 7. 問題概要 糖度度 : 1 糖度度 : 2 糖度度 : 3
  8. 8. 問題概要 糖度度 : 1 糖度度 : 2最も⽢甘い部分の糖度度を答えてください。 糖度度 : 3
  9. 9. 部分点(10pt)制約¤  制約 ¤  巣の数 <= 100 ¤  |巣の位置(x,y)| <= 100 ¤  巣の⼤大きさ <= 100 ¤  タイプ1のみ
  10. 10. 部分点(10pt)解法¤  1つの巣につき、含まれる六六⾓角形の数は... ¤  1 + (6 + 12 + .. + 594) ≒ 30,000¤  よって、勘定すべき六六⾓角形の数は ¤  30,000 * 100(巣の数) = 3,000,000 ¤  このぐらいなら普通に数えてしまえばいい¤  配列列を⽤用意し、そこに各巣に対して糖度度を⾜足し算していく
  11. 11. 部分点(10pt)解法¤  [!] 配列列のサイズに注意¤  巣の位置は絶対値で100 以下なので・・・ ¤  最⼩小で -200、最⼤大で 200 の位置まで⽢甘さが及ぶ可能性がある¤  念念のため+250の下駄を履履かせて、500x500の配列列を⽤用意する
  12. 12. 部分点(50pts)制約¤  制約 ¤  巣の数 <= 10,000 ¤  |巣の位置(x,y)| <= 500 ¤  巣の⼤大きさ <= 500 ¤  タイプ1のみ¤  巣の数が多いので、愚直に数えたら間に合わない ¤  まともにやると O(⾯面積 x 巣の数) かかってしまう
  13. 13. 部分点(50pts)解法¤  「累累積和」というテクを使うことで計算量量を減らせます。 ¤  巣の数だけ⾏行行なっていた「区間の塗りつぶし」の操作を、 最後に⼀一気にやる
  14. 14. 累累積和の例例¤  四⾓角形の場合
  15. 15. 累累積和の例例¤  四⾓角形の場合
  16. 16. 累累積和の例例¤  四⾓角形の場合
  17. 17. 累累積和の例例¤  四⾓角形の場合
  18. 18. 累累積和の例例¤  四⾓角形の場合
  19. 19. 累累積和の例例¤  四⾓角形の場合 4点に対する操作 ↓ 下に向けて⼀一気に⾜足す ↓ 右に向けて⼀一気に⾜足す
  20. 20. 六六⾓角形で累累積和・・・?
  21. 21. 六六⾓角形で累累積和・・・?
  22. 22. 六六⾓角形で累累積和・・・?
  23. 23. 六六⾓角形で累累積和・・・?
  24. 24. 六六⾓角形で累累積和・・・?
  25. 25. 六六⾓角形で累累積和・・・?
  26. 26. 六六⾓角形で累累積和・・・?
  27. 27. 六六⾓角形で累累積和・・・? 完  成  !
  28. 28. 考慮すべき点の位置 中⼼心 : x,y 巣のサイズ : r (x-r+1, y) (x-r,y+r-1) (x+1, y-r+1) (x+1, y+r) (x+r,y) (x+r+1, y-r) 1を⾜足す。
  29. 29. 考慮すべき点の位置 中⼼心 : x,y 巣のサイズ : r (x-r+2, y) (x-r+1,y+r) (x+1, y-r) (x+1, y+r-1) (x+r, y-r+1) (x+r+1,y) 1を引く。
  30. 30. 部分点(50pts)解法まとめ¤  準備パート ¤  各巣に対して ¤  さっきの12点に+1 or -1の操作をする¤  累累積和パート ¤  右上 : (0, +1) に⼀一気に⾜足す ¤  右下 : (+1, -1) に⼀一気に⾜足す ¤  右 : (+1, 0) に⼀一気に⾜足す¤  六六⾓角形を全部⾒見見る ¤  ⼀一番⼤大きい値が答え。
  31. 31. 満点制約¤  制約 ¤  50ptsと同じ¤  巣の種類の追加  : タイプ2 ¤  ⼀一様ではなく、右図のように 中⼼心に向かうほど糖度度が増すタイプ 1 1 1 1 2 2 1 1 2 3 2 1 1 2 2 1 1 1 1
  32. 32. 満点制約¤  制約 ¤  50ptsと同じ¤  巣の種類の追加 : タイプ3 ¤  中⼼心からの距離離の”近さ”によって 糖度度が⼆二乗になるタイプ 1 1 1 1 4 4 1 1 4 9 4 1 1 4 4 1 1 1 1
  33. 33. 解法 : タイプ2を攻略略する ¤  タイプ2の巣は、タイプ1の巣が複数集まったものと考える 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 11 2 3 2 1 = 1 1 1 1 1 + 1 1 1 + 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1
  34. 34. 解法 : タイプ2を攻略略する + +
  35. 35. 解法 : タイプ2を攻略略する 打ち消しあう  x6 + +
  36. 36. 解法 : タイプ2を攻略略する 打ち消しあう x6 打ち消しあう x6 + +
  37. 37. 解法 : タイプ2を攻略略する 打ち消しあう  x6 打ち消しあう  x6 + + 打ち消しあう
  38. 38. 解法 : タイプ2を攻略略する 結局 ⇒
  39. 39. タイプ1より簡単な形にできた!
  40. 40. 解法 : タイプ3を攻略略する ¤  タイプ2同様、同じ形(パターン)の合計に直す! 1 1 1 1 1 1 1 4 4 1 1 3 3 1 1 11 4 9 4 1 = 1 3 5 3 1 + 1 3 1 + 1 1 4 4 1 1 3 3 1 1 1 1 1 1 1 1 1
  41. 41. 解法 : タイプ3を攻略略する 1 1 1 1 1 1 1 3 3 1 1 2 2 1 1 11 3 5 3 1 = 1 2 3 2 1 + 1 2 1 1 3 3 1 1 2 2 1 1 1 1 1 1 1 1 1
  42. 42. 解法 : タイプ3を攻略略する + =
  43. 43. 解法 : タイプ3を攻略略する¤  各サイズについてのパターンを合計すると・・・ + + 打ち消しあう
  44. 44. 解法 : タイプ3を攻略略する 結局 ⇒
  45. 45. 複雑な形になった : -2 : -1 : +2 : +1
  46. 46. 複雑な形になった 当然、タイプ3の巣が出る度度に このような操作を 逐次⾏行行なっていくのは不不可能。 (サイズが⼤大きくなると⼤大変)
  47. 47. そこで
  48. 48. このように考える
  49. 49. 最後に累累積和をとって⾜足せばいい 右⽅方向の累累積和 ⇒他の2⽅方向についても同様。
  50. 50. タイプ3攻略略まとめ 1 1 1 タイプ3出現の度度に 下記の計18点に対して、 1 4 4 1 各⽅方向に対応する操作を⾏行行う。1 4 9 4 1 ⇒ 巣を全て処理理し終えたら、 1 4 4 1 3⽅方向で累累積和を取り、 1 1 1 その結果を本番の累累積和配列列に加える。
  51. 51. 満点解法まとめ¤  累累積和配列列Aと、累累積和配列列B x 3(各⽅方向に対応) を⽤用意する¤  各巣に対して、タイプとサイズに対応する操作を⾏行行う ¤  タイプ1 or タイプ2 のときは、A に対する操作をする ¤  タイプ1: 12回 ¤  タイプ2 : 6回 ¤  タイプ3 のときは、 B に対する操作をする ¤  タイプ3 : 18回¤  それぞれの⽅方向のBで累累積和(対応する1⽅方向)を取る ¤  結果を全てAに加える¤  Aで累累積和(3⽅方向)を取る ¤  Aの中⾝身のうち、最⼤大値が答え
  52. 52. 類題¤  過去にいくつも出ています。 ¤  WUPC2012/F : 最後の問題 ¤  ⻑⾧長⽅方形に含まれる点の数を累累積和で出す ¤  第11回  情報オリンピック本戦/4: 釘(NAILS) ¤  三⾓角形で累累積和 ¤  Autumn Fest 2012/I : Pyramid ¤  正⽅方形を45度度回転させた形の累累積和¤  ⽬目指せ、いもす法マスター!
  53. 53. 統計¤  First AC : hos.lyric* (24:26)¤  正解数 : 4 ¤  通した⼈人(4/205) : 2% ¤  ACだった解答(4/55) : 7%

×