Lilliput Steps

小さな一歩から着実に. 数学やプログラミングのことを書きます.

2012-09-01から1ヶ月間の記事一覧

AOJ 2412 - Village

問題文 : 村解法 : Rによってブロック分けをする. 近傍の8ブロックを1つのグループとみなして, このグループの数を幅優先探索で求める. setを使っているので, O(NlogN)時間で探索を終えることが出来る.コード : #include <cstdio> #include <cmath> #include <set> using namespa</set></cmath></cstdio>…

AOJ 2312 - Magical Girl Sayaka-chan

問題文 : 魔法少女さやかちゃん解法 : 問題文で示されている円環が直線だと考えると, ある音符とある音符の間は、昇順になっていることが望ましい. そこで、始点を音程のうちもっとも小さいもの, 終点を音程のうちもっとも大きいものとし, 始点->終点 にいく…

IOI 2011-day1 Rice Hub

問題文 : 米集積場 (pdf注意)解法 : C(x) : Bバーツ以内でx個の水田から米を届けられるか, とすると, C(A)が成り立つ時, C(A - 1)も成立する. よって, xについて二分探索を行う.このとき, 集める水田が連続していたほうがいいことは明らかなので, R - x個の,…

JOI春合宿 2012-day4 Bookshelf

問題文 : 本棚解法 : にかいどうさんの言うとおり, 昨日解いた「House Moving」と同じ問題でした.(重さがそれぞれ違いますが, あまり関係ない) ということで, 解説は昨日のもの参照です. BITでも解けるみたいなので, あとでBITで実装してみます.コード : #in…

AOJ 2431 - House Moving

問題文 : 引越し解法 : 荷物を動かすために使う体力を最小化する、ということは 動かさない荷物の重量を最大化する、ということと等しい. ゆえに, 増加する部分列のうち, 重さが最大のものを総重量から引いたものが答えとなる.荷物の重さをkとし, dp[k] -> …

PKU 3171 - Cleaning Shifts

問題文 : Cleaning Shifts解法 : dp[Ei] -> Ei秒まで掃除するのに必要な時間, とし, 牛iが時間Si秒からEi秒まで掃除でき, 雇うのに給料がMiかかるとすると dp[Ei] = min(dp[Ei], min(dp[Si] ~ dp[Ei]) + Mi) となる. dpテーブルはINFなどで初期化しておく. …

ARC #008 D - タコヤキオイシクナール

問題文 : タコヤキオイシクナール解法 : Nに対してMが小さいので, Nの座標圧縮を前もって行なっておく. (こうしても正しい結果が得られることは, 美味しさrのたこ焼きが(1, 0)と書かれたタコヤキオイシクナールを通っても美味しさrが保たれることから分かる.…

PKU 3368 - Frequent values

問題文 : Frequent values解法 : 各ノードは昇順になっているため、各数字の出現頻度をノードとして持つセグメント木を構築する. 各クエリについて, a[s] = a[t]であればt - s + 1を, そうでなければa[s]とa[t]を適切なだけ削り, RMQの処理を行う.コード : #…

AOJ 0145 - Cards

問題文 : カード解法 :dp(l, r) -> 区間(l, r)のカードを併合するために必要な最小コストとすると, l番目のカードが最も上に, r番目のカードが最も下になるのは明らかなのでdp(l, r) = min(dp(l, r), dp(l, i) + dp(i+1, r) + a[l] * b[i] * a[i+1] * b[r]) …

AOJ 0235 - Sergeant Rian

問題文 : サージェント・ライアン解法 : 最後に訪れる島を根とした木を作ると, 爆破する橋が必然的に決まる. ゆえに, 全ての島について最後の島としたときの爆破する時間を考え, その最小値を答えとする.コード : #include <cstdio> #include <cstring> #include <vector> #define INF</vector></cstring></cstdio>…

AOJ 0234 - Aizu Buried Treasure

問題文 : 会津の埋蔵金解法 : f(ny, nx, l, r, oxygen) -> 現在場所(nx, ny)にいて, 深さny[m]のうちl ~ rまでの距離は移動済みで, oxygenだけ酸素をもっている, という状態をもった動的計画法を行う. 状態空間が5*10^4になるため, 楽にメモ化再帰ができる. …

AOJ 0232 - Life Game

問題文 : 人生ゲーム解法 : dp(i, j) -> 場所iにいてj円を持っている確率, とし動的計画法を行う. int型にキャストして表示することに注意.コード : #include <cstdio> #include <cstring> #include <algorithm> typedef struct { int dx; int money; } State; using namespace std; int </algorithm></cstring></cstdio>…

AOJ 0224 - Bicycle Diet

問題文 : 自転車ダイエット解法 : ケーキ屋の数が少ないので, 訪れたケーキ屋の集合および今いる頂点を持ったダイクストラを行う. "一度訪れたケーキ屋に再び訪れることができない"ということに注意.コード : #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #incl</algorithm></cstdlib></cstring></cstdio>…

AOJ 1077 - The Great Summer Contest

問題文 : The Great Summer Contest解法 : 2つのペアをグループ化することが出来るので, 2つのペアをグループ化する. 4番目のタイプのコンテストは, 3つあると1 ~ 3番目のコンテストを1回ずつ開くのと同義になるので0回, 1回, 2回開く場合を考えて貪欲的にコ…

JOI春合宿 2012-day1 JOI Flag

問題文 : 日本情報オリンピック旗解法 : 旗を4つに分解し, それぞれに何を割り振るのかが最適なのかを深さ優先探索で決めていく. ここで, 旗の大きさに対して最初から書かれている文字の個数が少ないので, 見ている範囲に文字が無い or 旗のレベルが0のとき…

JOI春合宿 2008-day2 cheating

問題文 : カンニング対策 (pdf注意, 3枚目)解法 : 監視する装置の範囲の最大値を求めれば良いから, すべての装置の精度を等しいものとして考える. すると, 端から貪欲的に装置を置いていける. 装置の範囲の最大値は, 二分探索で決めてやることで, O(Mlog(max…

AOJ 0215 - Pachimon Creature

問題文 : パチモンクリーチャー解法 : 最初に選ぶパチクリを決めると, 次に選ぶパチクリが決まっていく. このパチクリ同士の関係を線で結んでいくと, 必然的にグラフになっている. ゆえに, この問題はグラフの最短経路を求める問題に帰着できる. ここでは, …

Codeforces #138 Div.2

コンテストページ : Cf#138 Div.2結果 : ox-x- 1122th 1495 -> 1409 (-86)感想 : これは笑う. Bは配列の要素が1つ少なくてWAしてしまった(絶望) 今回のセット頑張れば上位食い込めたのに色々こけてしまって残念...解法 :A. 平行六面体の, 3つの面の表面積が…

AOJ 0214 - Autumnal Illumination

問題文 : 秋のイルミネーション解説 : 各四角形の交差判定ができれば, 各四角形を頂点とみて, 連結成分の個数を数える問題となる.連結成分の個数を求める方法は, union-find木を使う方法などもあるが, ここでは深さ優先探索で同等な事をしている.ここで, 四…

AOJ 0246 - Bara-Bara Manju

問題文 : ばらばら饅頭解法 : まず, 2個の饅頭で作る組み合わせが最適である(らしい) ので, 2個で作れる饅頭の個数を貪欲法で求める. (証明できなかった).その後は, ナップサック問題を解く要領でメモ化再帰を行う. このように, 配列に値を持たせて行うDPをm…

JOI春合宿 2011-day2 keycards

問題文 : カードキー解法 : 包除原理のようなものをつかう.この問題は, "0 ~ 2 ^ (N - K)までの数から, すくなくとも1つ数をつかって論理積を0にする組み合わせの総数はいくつか", という問題に置き換えられる.数の選び方は, U = 2 ^ (2 ^ (N - K)) - 1 通り…

AOJ 0247 - Ice Maze

問題文 : AOJ 0247解法 : 基本的には深さ優先探索を行う. ただし, それだけでは時間制限に間に合わないので, 反復深化深さ優先探索(IDDFS)を行う. 具体的には, 下界uを決めて, uよりコストがかかることがわかればuを増やすという事を行う. 下界から決めてい…