1 of 19

J〜L 解説

SuperSonic 400x3

2 of 19

J-都(200〜500)

3 of 19

問題

・H*Wのグリッドグラフで、頂点(x,y)を始点としたハミルトン路は存在するか?

4 of 19

面積が偶数のときYes

・たて、横のどちらかが偶数のとき、輪っかが作れる

5 of 19

面積が偶数のときYes

・輪っかの、始める地点の隣を切れば正しいルートになる

6 of 19

面積が奇数のとき

・面積が偶数ならOKなことがわかった

・たてと横がどちらも奇数のときどうか?

7 of 19

Yesのパターン

・x+yが偶数のとき、できる

・偶数*奇数の長方形4つに分けられて

それらの長方形は輪っかが作れる

・輪っかを始点の周りで切ってつなぐと

全マスにいける

(コーナーがあるが、考えればわかるので省略)

8 of 19

Noのパターン

・x+yが奇数のときだけ、できない

・一マスとなりに進むと色が変わる

・黒→白→黒→...なので黒が白以上のはず

 だが、黒は白より少ないので無理

9 of 19

解法

・h*wとx+yが両方奇数だったらNo,それ以外はYes

・3問目のコードをそのまま提出する

10 of 19

K -救済(200〜500)

11 of 19

問題

H*Wのグリッドがあるので、すべての長方形の数字の和の合計を求めよ。

・長方形はとてもたくさんあるので、そのまま計算できない

・それぞれのマスが何回足されるか考えると簡単に解ける

 

12 of 19

13 of 19

L -樹木(400〜500)

14 of 19

問題概要

・N種類の樹がある

・天界では | a[ i ] - a[ j ] | ,魔界では | b[ i ] - b[ j ] | のコストで樹 i を樹 j に変更できる

・各種類の樹を1番の樹に変更するための最小コストはいくつか?

15 of 19

グラフ

・頂点は各樹 ... N個

・樹 i から樹 j にコスト | a[ i ] - a[ j ] | 、 | b[ i ] - b[ j ] | で行けることを辺にする ... N2

・最短経路問題なので、Dijkstra法を使う

・各樹からDijkstraすると、O(N3logN) でTLE

16 of 19

改善1

・ | a[ i ] - a[ j ] | や | b[ i ] - b[ j ] | はiとjを交換しても同じ

・xから1への最短距離は、1からxへの最短距離と同じ

・頂点1だけからDijkstraすればよい

・O(N2logN) になった

17 of 19

改善2

・辺が各i,各jの間にあって、N2個あるのが困る

・ | a[ x ] - a[ y ] | = | a[ x ] - a[ z ] | + | a[ z ] - a[ y ] |

(a[ x ] > a[ z ] > a[ y ]のとき)

・ソートしたら、二つが隣でない限り上の表し方ができる

・ソートして隣になるものどうしだけに辺を貼ればよい

18 of 19

満点解法

・aでソートして隣り合うペアに、 | a[ i ] - a[ j ] | の辺をはる

・bでソートして隣り合うペアに、 | b[ i ] - b[ j ] | の辺をはる

・頂点1からDijkstraする

・頂点がN個、辺が2*N個くらいなので、計算量はO(NlogN)

19 of 19