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.
AtCoder Regular Contest 040
解説
AtCoder株式会社
3/19/15
ARC  040  A問題  解説  
「床塗り」
snuke
問題概要
N*N  のマス⽬目が⾚赤と⻘青のインクで塗られている  
⾚赤のマスが多いか、⻘青のマスが多いか、同じかを判定せよ  
1  ≦  N  ≦  100
解法
ʻ‘Rʼ’  の個数、ʼ’Bʼ’  の個数をそれぞれ数え、⽐比較する  
⽂文字列列の扱いに慣れていると良良いでしょう
ARC  040  B問題  解説  
「直線塗り」
snuke
問題概要
N  個のマスが直線状に並んでいる  
⾼高橋君は全てのマスを塗りたいと思っている  
いくつかのマスはすでに塗られている  
⾼高橋君はマス  1  からスタートする  
1  秒の間に、  
・隣隣のマスに移動する  
・右  R...
解法
まず、移動にかかる時間について考える  
最も右にある  ʻ‘.ʼ’  を塗ることができる場所まで進めば⼗十分
で、それ以上進むメリットはない  
つまり、最も右にある  ʻ‘.ʼ’  がマス  i  だとすると、  
max(0,  i...
解法
次に、銃を撃つ回数について考える  
・最も左にある  ʼ’.ʼ’  を探す(これをマス  i  だとする)  
・マス  i  〜~  マス  i+R-‐‑‒1  までを塗る  
を繰り返すのが最善となる  
解法
移動にかかる時間と、銃を撃つのにかかる時間を⾜足し合わせ
てあげれば答えになります  
ARC  040  C問題  解説  
「Z塗り」
snuke
問題概要
N*N  のマス⽬目があり、いくつかのマスは既に塗られている  
インク発射装置を使うと、Z字型の領領域を塗ることができる  
すべてのマスを塗るためには装置を何回使えばいいか  
1  ≦  N  ≦  100
解法
まだ塗られていないマスのうち、最も上にあるもののうち最
も右にあるものに注⽬目する  
図の◯のようなマス  
解法
このとき、  
・◯のマスより上の⾏行行にあるマスと、  
・◯のマスと同じ⾏行行で◯のマスの右にあるマス  
は既に塗られているはず  
ここで、◯のマスを塗る⽅方法について考えると、  
Z字の右上の⾓角を◯に合わせて塗る塗り⽅方が他...
解法
解法としては、  
・まだ塗られていないマスのうち右上のものを探す  
・そのマスにZ字の右上の⾓角を合わせるように塗る  
を繰り返し、全部のマスが塗られるまでに繰り返した回数を
答えれば良良い
ARC  040  D問題  解説  
「カクカク塗り」
snuke
問題概要
マス⽬目があり、いくつかのマスには障害物がある  
「今いるマスを塗って隣隣のマスへ移動する」を繰り返す  
移動するたびに90度度向きを変えなければならない  
スタートのマスが決まっているとき、すべてのマスを塗るこ
とが可能か判定...
部分点(40点)
1  ≦  N  ≦  50  
マス⽬目が少し⼩小さい
部分点(40点)
スタートの向き、ゴールの位置、ゴールの向きをすべて試す  
例例えば図のような状態を試す  
このとき全てのマスが塗れるかを判定したい
部分点(40点)
経路路について考えたとき、あるマスに注⽬目すると、そこから
は上or下と左or右の2本の線が伸びるはず  
つまり、上下⽅方向のどちらかちょうど⼀一⽅方に線が伸びている
はず  
上下⽅方向の線だけ書いてしまおう  
各列列に...
部分点(40点)
そして、左右⽅方向も同様に書く  
すると、経路路ができあがる  
ただし、ここで出来上がった経路路が正しいものかを判定しな
いといけない(右の図のような例例がある)
部分点(40点)
解法をまとめると、  
スタートの向き、ゴールの位置、ゴールの向きをすべて試す  
経路路の線を書いて、それが正しいか判定する  
ゴールの位置の候補がN^2個、判定がO(N^2)なので、  
計算量量はO(N^4)となる
満点解法
1  ≦  N  ≦  400  
マス⽬目が⼤大きい  
ゴール位置の候補を減らす  
満点解法
スタート・ゴールの経路路上の特徴を考える  
スタート・ゴールでは、上下⽅方向  or  左右⽅方向のどちらかに
しか線が出ない  
つまり、上下⽅方向  or  左右⽅方向のどちらかの⽅方向に対しては
障害物と同じような扱いになる  
満点解法
上下⽅方向(or  左右⽅方向)に線を書き⼊入れるとき、それぞれ
の列列には空きマスが偶数個なければいけない  
奇数個だと端数が出てしまう  
ゴールは「上下⽅方向  or  左右⽅方向のどちらかの⽅方向に対して
は障害物と同じよう...
満点解法
ゴールの位置の候補がN個、判定がO(N^2)なので、  
計算量量はO(N^3)となる
Upcoming SlideShare
Loading in …5
×

1

Share

Download to read offline

AtCoder Regular Contest 040 解説

Download to read offline

AtCoder Regular Contest 040 解説

Related Books

Free with a 30 day trial from Scribd

See all

AtCoder Regular Contest 040 解説

  1. 1. AtCoder Regular Contest 040 解説 AtCoder株式会社 3/19/15
  2. 2. ARC  040  A問題  解説   「床塗り」 snuke
  3. 3. 問題概要 N*N  のマス⽬目が⾚赤と⻘青のインクで塗られている   ⾚赤のマスが多いか、⻘青のマスが多いか、同じかを判定せよ   1  ≦  N  ≦  100
  4. 4. 解法 ʻ‘Rʼ’  の個数、ʼ’Bʼ’  の個数をそれぞれ数え、⽐比較する   ⽂文字列列の扱いに慣れていると良良いでしょう
  5. 5. ARC  040  B問題  解説   「直線塗り」 snuke
  6. 6. 問題概要 N  個のマスが直線状に並んでいる   ⾼高橋君は全てのマスを塗りたいと思っている   いくつかのマスはすでに塗られている   ⾼高橋君はマス  1  からスタートする   1  秒の間に、   ・隣隣のマスに移動する   ・右  R  マスを塗る(マス  i  ~∼  マス  i+R-‐‑‒1  までを塗る)   1  ≦  N  ≦  100
  7. 7. 解法 まず、移動にかかる時間について考える   最も右にある  ʻ‘.ʼ’  を塗ることができる場所まで進めば⼗十分 で、それ以上進むメリットはない   つまり、最も右にある  ʻ‘.ʼ’  がマス  i  だとすると、   max(0,  i-‐‑‒R)  回進めば⼗十分  
  8. 8. 解法 次に、銃を撃つ回数について考える   ・最も左にある  ʼ’.ʼ’  を探す(これをマス  i  だとする)   ・マス  i  〜~  マス  i+R-‐‑‒1  までを塗る   を繰り返すのが最善となる  
  9. 9. 解法 移動にかかる時間と、銃を撃つのにかかる時間を⾜足し合わせ てあげれば答えになります  
  10. 10. ARC  040  C問題  解説   「Z塗り」 snuke
  11. 11. 問題概要 N*N  のマス⽬目があり、いくつかのマスは既に塗られている   インク発射装置を使うと、Z字型の領領域を塗ることができる   すべてのマスを塗るためには装置を何回使えばいいか   1  ≦  N  ≦  100
  12. 12. 解法 まだ塗られていないマスのうち、最も上にあるもののうち最 も右にあるものに注⽬目する   図の◯のようなマス  
  13. 13. 解法 このとき、   ・◯のマスより上の⾏行行にあるマスと、   ・◯のマスと同じ⾏行行で◯のマスの右にあるマス   は既に塗られているはず   ここで、◯のマスを塗る⽅方法について考えると、   Z字の右上の⾓角を◯に合わせて塗る塗り⽅方が他の塗り⽅方より も真に良良いことが分かります
  14. 14. 解法 解法としては、   ・まだ塗られていないマスのうち右上のものを探す   ・そのマスにZ字の右上の⾓角を合わせるように塗る   を繰り返し、全部のマスが塗られるまでに繰り返した回数を 答えれば良良い
  15. 15. ARC  040  D問題  解説   「カクカク塗り」 snuke
  16. 16. 問題概要 マス⽬目があり、いくつかのマスには障害物がある   「今いるマスを塗って隣隣のマスへ移動する」を繰り返す   移動するたびに90度度向きを変えなければならない   スタートのマスが決まっているとき、すべてのマスを塗るこ とが可能か判定せよ   1  ≦  N  ≦  50
  17. 17. 部分点(40点) 1  ≦  N  ≦  50   マス⽬目が少し⼩小さい
  18. 18. 部分点(40点) スタートの向き、ゴールの位置、ゴールの向きをすべて試す   例例えば図のような状態を試す   このとき全てのマスが塗れるかを判定したい
  19. 19. 部分点(40点) 経路路について考えたとき、あるマスに注⽬目すると、そこから は上or下と左or右の2本の線が伸びるはず   つまり、上下⽅方向のどちらかちょうど⼀一⽅方に線が伸びている はず   上下⽅方向の線だけ書いてしまおう   各列列に注⽬目すると、上下⽅方向の線の書き⽅方は⼀一意に定まる
  20. 20. 部分点(40点) そして、左右⽅方向も同様に書く   すると、経路路ができあがる   ただし、ここで出来上がった経路路が正しいものかを判定しな いといけない(右の図のような例例がある)
  21. 21. 部分点(40点) 解法をまとめると、   スタートの向き、ゴールの位置、ゴールの向きをすべて試す   経路路の線を書いて、それが正しいか判定する   ゴールの位置の候補がN^2個、判定がO(N^2)なので、   計算量量はO(N^4)となる
  22. 22. 満点解法 1  ≦  N  ≦  400   マス⽬目が⼤大きい   ゴール位置の候補を減らす  
  23. 23. 満点解法 スタート・ゴールの経路路上の特徴を考える   スタート・ゴールでは、上下⽅方向  or  左右⽅方向のどちらかに しか線が出ない   つまり、上下⽅方向  or  左右⽅方向のどちらかの⽅方向に対しては 障害物と同じような扱いになる  
  24. 24. 満点解法 上下⽅方向(or  左右⽅方向)に線を書き⼊入れるとき、それぞれ の列列には空きマスが偶数個なければいけない   奇数個だと端数が出てしまう   ゴールは「上下⽅方向  or  左右⽅方向のどちらかの⽅方向に対して は障害物と同じような扱いになる」マスなので、空きマスが 奇数個の列列(or  ⾏行行)になければならない   つまり、ゴールの位置としては、空きマスが奇数個のある列列 (or  ⾏行行)のうちのどこかしか試さなくていい!
  25. 25. 満点解法 ゴールの位置の候補がN個、判定がO(N^2)なので、   計算量量はO(N^3)となる
  • ssuser9e1e6b

    Jun. 13, 2015

AtCoder Regular Contest 040 解説

Views

Total views

5,693

On Slideshare

0

From embeds

0

Number of embeds

594

Actions

Downloads

31

Shares

0

Comments

0

Likes

1

×