7月21日のPKU

今日:14問
今日までの合計:35問

PKU 1103 Maze

問題

PKU 1103

問題文中の画像のような迷路において、サイクルの数と最長のサイクルの長さを求める問題。

解法

とても面倒だがやるだけ。

PKU 2654 Rock-Paper-Scissors Tournament

問題

PKU 2654

じゃんけんの大会において、参加者それぞれの対戦が与えられるので参加者それぞれの勝率を求める問題。

解法

普通にやるだけだと思うけど時間制限が厳しいみたい?

PKU 1299 Polar Explorer

問題

PKU 1299

半径Xの円周のある位置から、Z度だけ離れたある地点へ行って帰ってきたい。燃料はYガロンあって、1ガロンで5マイル進むことができる。X,Y,Zが与えられるので燃料が足りるかどうか判定する問題。

解法

やるだけ。

Z > 180 のときは逆周りした方がよいので気をつける。また Z = 360 のときは Z = 0 と同じであるので気をつける。

PKU 1297 Supermarket

問題

PKU 1297

通りにN個の店が並んでいて、それぞれの店ではある商品をある値段で売っている。与えられたリストにはM個の買うべき商品の番号が書かれている。通りを一回通り抜けつつ、リストに書かれている順に商品を買うとき、払わなければならない最小の金額を求める問題。1 <= M <= 100, 1 <= N <= 100000

解法

dp[n][m] を最初からn番目の店まできた時点でリストのm個目までの商品を買い終えているときに払った金額の最小値としてDP。普通にメモリをとると O(NM) のメモリが必要。今回はこれでも大丈夫だが、dp[n][m]を決めるときに必要なのが dp[n-1][m-1] と dp[n-1][m] だけであることを考えると O(M) のメモリでもいける。

PKU 3573 I18n

問題

PKU 3573

文章中に略された単語がいくつかある。略された単語は

[最初のアルファベット] [数] [最後のアルファベット]

という形をしている。[数]はこの間に入るアルファベットの数を表す。略された単語が、それ以前に文章にでてきた単語ひとつとマッチするときに限ってそれを復元できる。

1000行以下で一行80字以下の文字列の中には32文字以下の単語がいくつかある。これを読み込んで、略された単語をできるだけ復元する問題。

解法

面倒なやるだけ。

PKU 3338 Rectangle Cutting

問題

PKU 3338

w x hの大きさの長方形に、長方形のかたちの切り込みをn個入れる。このとき、元の長方形が何個に分割されたか求める問題。

解法

それぞれのセルについて、自分の上・右・下・左のどこに切り込みが入っているかをビット単位のフラグ等で記録する。後は切り込みを壁のように見立ててFlood-Fillを繰り返す。

PKU 3385 Genealogy

問題

PKU 3385

n+1個の節からなる木において、どの節も高々d個の子しか持たないように節を挿入する。最低限挿入しなければならない節の数を求める問題。

解法

やるだけ。

PKU 2497 Strategies

問題

PKU 2497

ビルとスティーブとリーナスの三人がプログラミングコンテストで戦う。三人の戦略はそれぞれ決まっている。

コンテストの時間と問題の難易度が与えられるので、誰が一位になるかを決める問題。

解法

やるだけ。

PKU 3421 X-factor Chains

問題

PKU 3421

正の整数Xについての以下のような整数列を考える。

1 = X0, X1, X2, ... , Xm = X

ただし、すべての i について Xi < Xi+1 であり Xi | Xi+1 である。(a | b とは b を a で割ったあまりが0であることをいう)

正の整数X (X <= 220)が与えられるので、上の数列のうちもっとも長いものの長さと、その長さの数列が何通り存在するかを求める問題。

PKU 1374 Crosswords

問題

PKU 1374

クロスワードパズルの盤面を出力する問題。詳細はSample InputとSample Outputで確認できる。

解法

とにかくやるだけ

PKU 2032 Square Carpets

問題

PKU 2032

部屋のフロアの特定の部分が傷ついている。これをぴったり覆い隠すのに、正方形のカーペットが最低何枚必要か求める問題。

解法

BFS+枝刈り

PKU 2807 Bingo!

問題

PKU 2807

ビンゴをする。ただし通常のビンゴではなくて、与えられたX種類のパターンのうちY種類を満たす形になればビンゴしたということにする。

今、ある列の数字が何回呼ばれたかが分かっている。自分にとってもっとも都合のよい数が呼ばれたと仮定すると、最低であと何回数が呼ばれればビンゴすることができるかを求める問題。

解法

すべてのパターンで確かめる。

PKU 2004 Mix and Build

問題

PKU 2004

単語がn個ある。ある単語に何か一文字追加して並び替えることで次の単語になるような列を考える。たとえば"ab", "bar", "crab", "cobra", "carbon"などといった単語の列。

与えられた単語の中で作れるこの列のうち最長のものを一つ求める問題。

解法

なんか最長増加部分列のDPみたいにしたら解けた。

PKU 3546 Sea Battle

問題

PKU 3546

10x10のグリッド上に4x1の船が一隻、3x1の船が二隻、2x1の船が三隻、1x1の船が四隻ある。ただし、船どうしは交差してはならず、また船の先端がグリッドの端っこにあってもいけない。

10x10のグリッドで、船のある部分に '1' が書かれているものが与えられるので、これが正しい船の配置かどうか調べる問題。

解法

DFS