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

Hacker Cup 2012 round 1 : Squished Status

問題概要 1~M(M 解法 直前何桁まで連続しているかを持ちながらDP。leading zeroに注意。

Hacker Cup 2012 round 1 : Recover the Sequence

問題概要(適当) merge sortのmergeの際にどちらから選んだかの情報が与えられるので元のデータを復元する問題。 解法 まず、順にシミュレートして与えられるデバッグ出力列のどの部分が充てられるのかを求めておく。この情報を持っておけば逆順に復元するこ…

Hacker Cup 2012 round 1 : Checkpoint

問題概要 整数S(0, x+y>0)で、x+y+a+bのとりうる最小値を求める問題。 解法 comb(x+y,y)がS以下となる組み合わせは多くないので全列挙する。以下のコードは色々怪しい。

Hacker Cup 2012 round 1

結果。 Cは簡単。Aは自信なかった。Bは今見返すとAより簡単。大量に解かれていて全完必須だった。

2011-2012 Stanford Local Contest F : Fighting for Triangles

問題概要(適当) 辺数がE=18のグラフがある。ふたりでゲームをする。交互に色を塗り、三角形ができたら1ポイント獲得してさらに自分の手番になる。先手が勝つか後手が勝つか引き分けか判定する。 解法 既に選んだ辺に関してビットDPする。

2011-2012 Stanford Local Contest C : City Driving

問題概要 ノード数N( 解法 二重辺がある場合はLCAで簡単。二重辺がない場合、ひとつのサイクルに木がぶら下がってる感じになる。そのとき、同じ木の中にある2点間についてはLCAで、そうでないときは根までの距離に紺のサイクル上の距離をたしたのが答えにな…

整理とか

競技プログラミング歴2年目 2年経ってまだ黄コーダー…。周囲のレベルが上がっていることは確実(自分がSRMに出始めたときはDPやsetの存在すら知らなかったけどeasy解くだけで黄まですぐいけた)なんだけど、やっぱり赤くなりたい。いやMarathonとかは開始1年で…

2011-2012 Stanford Local Contest B : Ball Painting

問題概要 2*N(N 解法 dp[n] = {2*nのサイズの全てが白のボールを上から黒く塗る場合の数}とするとこれは二項係数を用いて簡単に計算することができる。後は最初に塗るボールをどれにするか全通り試せば良い。

2011-2012 Stanford Local Contest A : Another Rock-Paper-Scissors Problem

問題概要(適当) 再帰的に定義される数列があるので第N項を計算する問題。 解法 数列の定義を正確に把握できればコードにはすぐ落とせる。

2011-2012 Stanford Local Contest

結果。 virtual participationした。序盤にかなりつまづいたのが痛かった。解いていてそこまで難しくは感じなかったけど実装が妙に面倒なのが多かった印象。最後はC問題やってたけど実装面倒+二重辺に気づかず通せなかった。

UVa-10309 : Turn the Lights Off

UVa

問題概要 サイズ10*10のライツアウトを解いて最小手順を答える。 解法 このサイズなら全探索。(サイズが大きくなったら連立一次方程式を考える)

UVa-10341 : Solve It

UVa

問題概要 区間[0,1]で単調減少な関数が与えられるので根を求める問題。 解法 二分探索。浮動小数点数のせいで端点の処理が面倒くさい。

UVa-624 : CD

UVa

問題概要 長さN( 解法 全探索。タイブレークのルールをよく理解していないけど要素数の多い方を優先するようにしたら通った。

SGU-495 : Kids and Prizes

問題概要 N( 解法 期待値の線形性を使う。各箱について、それが1度以上選ばれる確率を求めてやればよい。

UVa-11413 : Fill the Containers

UVa

問題概要 長さN( 考えたこと 答えに関して二分探索。判定は貪欲でやる。

UVa-10356 : Rough Roads

UVa

問題概要 ノード数V( 解法 頂点、偶奇を組にしてDijkstraするだけ。

LiveArchive-4815 , UVa-12248 , SPOJ-MKLAR10 : Kids’ Wishes

問題概要 子供がK( 解法 W個の指定されたものによって円ができてよいのはK個全てが出現したときだけ。それ以外のときは直線が集まったものなら残りを適当につなげて円を作ることができる。連結なグラフが直線である条件は最低次数が1で最高次数が2以下である…

LiveArchive-3197, TJU-2154,1635, POJ-2850,2194, ZOJ-2403 : Stacking Cylinders

PKU

問題の流用があったのか複数収録されている(微妙に出力や入力が違う、ソート済みかそうでないかとか)。 問題概要 N(k-1個の円をそれぞれ下の二つの間に置いていく。このときちゃんと置けることが保証されている。一番上に置いた円の中心の座標を求める問題。…

LiveArchive-4104, UVa-1230 : MODEX

UVa

問題概要 x,y,z(いずれも値はsigned intに収まる)が与えられるのでx^y (z)を求める問題。 解法 いわゆるバイナリ法を使って計算する。

UVa-11926 : Multitasking

UVa

問題概要 [0,10^6(=:L))でのスケジュールを考える。[a,b)というスケジュールがN( 解法 長さLの配列を塗りつぶしていく。計算量が危ないように錯覚したけどダブった時点で処理を止めれば計算量はO(L)で抑えられる。

Codeforces Round #104 (Div. 1) C : Lucky Subsequence

問題概要 長さN( 解法 1~10^9までにlucky numberは1022(=:M)個しかない。これよりlucky numberがそれぞれ何個あるか、というデータ構造に変更しておくと、易しいDPの問題に落ちる。

Codeforces Round #104 (Div. 1) B : Lucky Number 2

問題概要 4がa1個、7がa2個、47がa3個、74がa4個部分文字列として含まれる辞書順最小の部分文字列を求める問題。できないときは指摘。 解法 場合分けでといたが、それはあまりよくない。辞書順最小の定石どおり、判定問題に落として解くべきだった。

Codeforces Round #104 (Div. 1) A : Lucky Conversion

問題概要 4、7からなる長さN(スワップする、書き換えるのにコストが1かかる。文字列XをYに変換するのに必要なコストを求める。 解法 もともと同じ位置に同じ文字が入っているのは無視してよい。4->7(7->4)にしなければならないのをA(B)とするとmax(A,B)が答…

Codeforces Round #104 (Div. 1)

結果。 lucky numberな回。順位はそれなり。でもやっぱり2500は手も足もでない感じだった。 Aはさっくり。Bは場合分けに行ってしまったのが残念(判定がO(1)でできれば場合分けしなくてもいいけど無理だよなぁ、とか本番中は考えていた。冷静に考えたらO(1)で…

IOPC12-IOPC1214 : Celebrities of Pretendia

問題概要 DAG上で最長パスを求める。

IOPC12-IOPC1213 : Colouring graphs

問題概要 ノード数N( 辺を追加する 辺を削除する K(>1)彩色の仕方が何通りあるか出力する を処理する。ただしグラフは常に森である。 解法 答えは、各連結成分に対してK*(K-1)^(size-1)をかけ合わせる。 連結成分の個数とサイズを求めるのは、制約が緩いので…

IOPC12-IOPC1212 : Utopia strikes back

問題概要 球面上にN個の点とM個の点がある。N個の点を中心として半径R以内にあるM個の点との間に辺をはる。M個の最大マッチングを持つ最小の半径Rを求める問題。 解法 球面上での2点間の距離は公式で求められる(弧度法に変換するのを忘れないこと)。後は半径…

Codeforces Round #103 (Div. 2) E : Competition

問題概要 N*N(N 解法 r,cを辞書順にソートして貪欲に小さい方に詰めていけばよい。最も小さいところを選ぶのにはBITやsetなどの適切なデータ構造を用いれば対数時間程度で求めることができる。

Codeforces Round #103 (Div. 2) D : Missile Silos

問題概要 ノード数V、辺数E(V,E 解法 単にdijkstraして、最短路が丁度Lになるような頂点をまず数える。その後各辺についてそのような位置を数える。0個あるか1個あるか2個あるかは場合分けで求められる。

Codeforces Round #103 (Div. 2) C : Anagram Search

問題概要 文字列SとT(長さアナグラムになっている部分文字列がいくつあるか求める問題。ただしSには任意の文字として扱える?が存在する。 解法 文字数をカウントしながらスライドしていくだけ。マッチしているかどうかの判定は愚直にO(|Σ|)かけてよい。