最近解いた問題
最近,AOJのVolume5を解いてる.解法をまとめないとすぐに忘れるのでメモ
0515 School Road
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0515
工事現場有りの経路列挙DP.工事現場に向かう遷移と工事現場から出てくる遷移を無くす.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
0516 Maximum Sum
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0516
k個までの最大部分和.しゃくとり法.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
|
0517 Longest Steps
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0517
連続している区間で持つ.
- 0がないなら,それぞれの区間の長さの最大
- 0があるなら,区間の前後が+1のみずれている場合にくっつけられるので,それが可能かどうか判定
全体でO(n)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
|
0518 The Oldest Site
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0518
最大の正方形を探す.2点を選んだ時に,その2点を結ぶ線を一辺とした時の正方形を考える.
選んだ2点をv[i], v[j]とした時にp = v[j] - v[i]と定めると,もう2つの点は
- v[i] + (p.y, -p.x) と v[i] + (p.x + p.y, p.y - p.x)
- v[i] + (-p.y, p.x) と v[i] + (p.x - p.y, p.y + p.x)
の2パターンとなる.その点が存在するかどうかをsetに持たせて判定し,最大値を求める.O(n2 logn).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
|
0524 Searching Constellation
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0524
目的の星座,写真の星それぞれpairで持ってソート.目的の星座を0番目からそれくらいずれているかを持っておく.1つの点を選んだ時に,その点を0番目の点と仮定した時に,ずれた点が存在するかどうかで星座判定を行う.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
|
0525 Osenbei
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0525
ヒントにもあるとおり10行しかないので,どの行を反転させたかは高々2nで全列挙出来る.次に列は0と1の多いほう(1が多いならそのまま,0が多いなら反転)で決まる.全体でO(2R * RC).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
0526 Boat Travel
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0526
辺を追加しながら,注文票のクエリが来た時にdijkstra.辺を追加する時に,既にその町と町を結ぶ辺があればコストが安いほうを採用する.O(k * n2 log(n)).
0-indexedにしていないのに初期化をn-1までしかしていないことに全く気づかずWAを大量生産した.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
|
0527 Setting Go Stones
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0527
偶奇.ひっくり返すときに同じ色の場所までしかしない.場所をstackに入れておいて
- 白をひっくり返す時は,一個前に白と黒をpopして今見てる場所と+1,白のpopした場所を-1
- 黒をひっくり返す時は,一個前に白と黒をpopして今見てる場所と+1,黒のpopした場所を-1
この処理をした後にimosして偶奇を見て反転.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
|
0528 Common Sub-String
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0528
このでの部分文字列とは連続した文字列なので,LCSの等しくない時に右から来る遷移と上のから来る遷移を消す.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
|
0529 Darts
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0529
4本まで投げれるので愚直にやるとn4.しかし4本までの組み合わせは1本,2本,1本 + 2本, 2本 + 2本なので最初に列挙する.p[i]を選んだ時に選べる最大はm-p[i]なのでm-p[i]を超えない最大のものを持ってくる.O(n2 logn)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
0530 Pyon-Pyon River Crossing
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0530
辺の重みを危険度にしてdijkstra.一個飛ばしの辺を予め追加しておきその辺のflagをtrueにしておく.後は,半額チケット有りdijkstraと同様に,その辺を使うなら+1して次の状態へいき,m枚以上使えないようにすれば良い.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
|
0531 Paint Color
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0531
問題文を勘違いして最初意味不明なことをしていた.問題文を理解すると蟻本の座標圧縮と同じだと思い実装する.ベニヤ板全体の大きさが与えられるので,圧縮する時に端(0とW-1,0とH-1)も追加しておく.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
|