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

AtCoder Beginner Contest 004 D: マーブル (最小費用流)

問題 D: マーブル - AtCoder Beginner Contest #004 | AtCoderabc004.contest.atcoder.jp 解法 AtCoder Beginner Contest 004 解説 from chokudai www.slideshare.netスタートと赤・緑・青のノードを結び、赤・緑・青と座標-500~500のノードを結び、これらの…

TopCoder SRM 633 Div1 Easy: PeriodicJumping (幾何)

解法 SRM 633 Div1 Easy, PeriodicJumping - na_o_ysのブログna-o-s.hateblo.jp幾何だ!難しそう!ってなってしまうの良くないなぁ…… コード public class PeriodicJumping { public int minimalTime(int x, int[] jumpLengths) { x = Math.abs(x); if (x ==…

TopCoder SRM 657 Div1 Medium: PolynomialGCD

解法 例えばs="2014"の時、 となる。 素因数に2を含む個数は、x=4の時、P(4)は5個、P(5)なら4個、P(6)なら4個、P(7)なら8個、P(8)なら……と増えていくが、正の個数で最小の個数は4個であることが分かる。このように各素数ごとに素因数の最小個数を求めると、"…

TopCoder SRM 657 Div1 Easy: ProblemSets

解法 二分探索するだけ。(なぜかできなかった) コード public class ProblemSets { public long maxSets(long E, long EM, long M, long MH, long H) { long low = 0; long high = Long.MAX_VALUE; while (high - low > 1) { long mid = (high + low) / 2;…

TopCoder SRM 634 Div1 Easy: ShoppingSurveyDiv1

解法 TopCoder SRM 634 Div1 Easy ShoppingSurveyDiv1、Div2 Medium ShoppingSurveyDiv2 - kmjp's blogkmjp.hatenablog.jp コード import java.util.Arrays; public class ShoppingSurveyDiv1 { public int minValue(int N, int K, int[] s) { for (int p = …

TopCoder SRM 635 Div1 Easy: SimilarRatingGraph

解法 Nが400以下なので、N-1個の区間の長さと傾きを計算しておき、傾きが等しく、長さの倍率が等しい区間を出せば良い……がっ……ダメっ……!!誤差ゲーなので値が小さくなり過ぎないように気をつけなければならない。 コード import java.util.ArrayList; impor…

TopCoder SRM 640 Div1 Easy: ChristmasTreeDecoration

解法 SRM 640 Div1 Easy, ChristmasTreeDecoration - na_o_ysのブログna-o-s.hateblo.jp コード public class ChristmasTreeDecoration { public int solve(int[] col, int[] x, int[] y) { int N = col.length; UnionFind uf = new UnionFind(N); for (int …

TopCoder SRM 641 Div1 Easy: TrianglesContainOrigin (幾何)

解法 TopCoder SRM 641 Div1 Easy TrianglesContainOrigin、Div2 Medium TrianglesContainOriginEasy - kmjp's blogkmjp.hatenablog.jp各点の仰角を求めてargsに入れておく。0以下になる場合には2*PIを足しておく。atan2を使うと仰角を簡単に求めることが出…

TopCoder SRM 642 Div1 Easy: WaitingForBus (DP・期待値)

解法 動的計画法(渡すDP)。dp[t]:= 時刻tに出発できる確率を計算しておく。 コード public class WaitingForBus { private final int MAX_TIME = 200001; public double whenWillBusArrive(int[] time, int[] prob, int s) { int N = time.length; double[…

AtCoder Beginner Contest 022 D: Big Bang (幾何・凸包)

問題 D: Big Bang - AtCoder Beginner Contest 022 | AtCoderabc022.contest.atcoder.jp 解法 AtCoder Beginner Contest 022 解説 from chokudai www.slideshare.net外側の点を結んで、全ての点が内部か線上にあるような多角形を作る。(凸包というらしい)…

TopCoder SRM 643 Div1 Easy: TheKingsFactorization (素因数分解)

問題 TopCoder Statistics - Problem Statement 解法 上のような整数を素因数分解する場合、ヒントを駆使しても10の8乗ループをすることになるが、primes[i] 素数で、primes[i]とprimes[i+1]の間にあるので、ループする必要がなくなる。 コード import java.…

TopCoder SRM 644 Div1 Easy: OkonomiyakiParty (しゃくとり法・組み合わせ)

解法 osizeをソートする。osize[i]が最小となる組み合わせを考える。この時osize[i+M-1]がosize[i]+Kより大きかったら、osize[i]が最小となる組み合わせは0通りである。osize[i]との差がK以内となる最大のosize[last]を考えると、osize[i]は必ず入れることに…

TopCoder SRM 645 Div1 Easy: JanuszTheBusinessman (貪欲法)

問題 TopCoder Statistics - Problem Statement 解法 TopCoder SRM 645 Div1 Easy JanuszTheBusinessman - kmjp's blog蟻本に載ってた気がする。酷いバグを埋め込んで大変苦労した。 コード import java.util.ArrayList; import java.util.Collections; publ…

TopCoder SRM 639 Div1 Easy: AliceGame (貪欲法)

問題 TopCoder Statistics - Problem Statement 解法 残っている数から引くことの出来る最大の奇数を引く。これを繰り返す。ただし。残りの数字が2になるようなパターンは避ける。 コード public class AliceGame { public long findMinimumValue(long x, lo…

TopCoder SRM 646 Div1 Easy: TheConsecutiveIntegersDivOne (全探索・シミュレーション)

問題 TopCoder Statistics - Problem Statement 解法 昇順にソートし、スタート位置、操作しない数字、増加か減少か、というのを全探索してシミュレーションする。やるだけ。 コード import java.util.Arrays; public class TheConsecutiveIntegersDivOne { …

TCO 2015 Round 1A Medium: Autogame (組み合わせ・シミュレーション)

問題 TopCoder Statistics - Problem Statement 解法 2015-04-11topcoder.g.hatena.ne.jp最初に全てのマスにトークンを置いておき、収束するまで回す。 min(K, 50) 回だけ回せば良い。収束したら、マスにあるトークンの数+1を各マスについてかけ合わせる。(…

TopCoder SRM 656 Div1 Medium: PermutationCounts

問題 TopCoder Statistics - Problem Statement 解法 TopCoder SRM 656 Div1 Medium PermutationCounts、Div2 Hard PermutationCountsDiv2 - kmjp's blogkmjp.hatenablog.jp神様仏様kmjp様 コード import java.math.BigInteger; import java.util.ArrayList;…

AtCoder Regular Contest 037 C: 億マス計算 (二分探索)

問題 C: 億マス計算 - AtCoder Regular Contest 037 | AtCoder 解法 各a[i]の段のmid以下のa*bの数をカウントし、それがKとなるようにmidを二分探索する。 コード import java.util.Arrays; import java.util.Scanner; public class Main { public static vo…

SRM 656 Div. 1 Easy: RandomPancakeStack (DP・期待値)

解法 dp[i][j]:= i番目にjのパンケーキが置かれる確率を3重ループを回して求めておき、最後に各パンケーキの美味しさを期待値を出す。1310 -> 1473 (+163) コード import java.util.Arrays; public class RandomPancakeStack { public double expectedDelici…

AtCoder Beginner Contest #006 D: トランプ挿入ソート (二分探索・最大増加部分列)

問題 D: トランプ挿入ソート - AtCoder Beginner Contest #006 | AtCoder 解法 AtCoder Beginner Contest 006 解説 コード import java.io.IOException; import java.util.Arrays; public class Main { public static void main(String[] args) throws Excep…

AtCoder Beginner Contest #005 D: おいしいたこ焼きの焼き方 (2次元の累積和)

問題 D: おいしいたこ焼きの焼き方 - AtCoder Beginner Contest #005 | AtCoder 解法 たこ焼き器について、二次元の累積和を求めておく。クエリに対して作れる長方形を全列挙し、その長方形を(x,y)だけ平行移動した時に、長方形内部の美味しさの合計を計算す…

AtCoder Beginner Contest 003 D: AtCoder社の冬 (包除原理・bit管理・動的計画法)

問題 D: AtCoder社の冬 - AtCoder Beginner Contest #003 | AtCoder 解法 ステップとしては、 R*C内のX*Yの取りうるパターンを調べる。 X*Y内のD+Lの取りうるパターンを調べる。 D+L内のDとLのパターンを調べる。 の3つをこなす必要がある。R*C内のX*Yの取り…

SRM 647 Easy: BuildingTowersEasy

コード import java.util.PriorityQueue; public class BuildingTowersEasy { public int maxHeight(int N, int[] x, int[] t) { for (int i = 0; i < x.length; i++) { for (int j = 0; j < x.length; j++) { t[i] = Math.min(t[i], t[j] + Math.abs(x[i] -…

AtCoder Beginner Contest 021 D: 多重ループ (組み合わせ・モジュラ逆数)

問題 D: 多重ループ - AtCoder Beginner Contest 021 | AtCoder 解法 1からnの中から重複を許してk個選ぶという問題に帰着できる。 を求めたいが、割り算をすると計算に時間がかかりすぎる。そこでモジュラ逆数を使う。モジュラ逆数 - Wikipedia コード impo…

SRM 655 Div. 1 Easy: BichromePainting (AC)

解法 X-Ray Screening System | Aizu Online Judge解法はAOJ 2002と同じ。必ず1番上に隠れていない正方形があるはずなので、それを取り除く。するとまた一番上に正方形が出てくるはずなので取り除く… というのを繰り返し、取り除ける正方形が無くなった時に…

SRM 655 Div. 1 Easy: BichromePainting (誤答)

嘘解法 左端から順番に見て、お手本に合うように塗っていき、最終形がお手本と同じになっていれば良いと思った(違った)。 誤答コード public class BichromePainting { public String isThatPossible(String[] board, int k) { String YES = "Possible"; S…

Indeed なう A日程 D: Longest Path (木DP)

問題 D: Longest Path - Indeedなう(オープンコンテスト) | AtCoder 解法 ある頂点vに注目した時に、「vに入ってくる最大のパス」と「vから出て行く最大のパス」を計算する。この2つが同じパスにならないように、頂点はそれぞれ1度ずつしか注目しない。め…

AtCoder Regular Contest 036 C: 偶然ジェネレータ

問題 C: 偶然ジェネレータ - AtCoder Regular Contest 036 | AtCoder 解法 dp[pos][diff0][diff1]:= pos文字目まで見た時に、(0の文字数)-(1の文字数)の最大値がdiff0であり、(1の文字数)-(0の文字数)の最大値がdiff1である組み合わせの数とする。S[pos]='0'…

Indeedなう A日程 E: Page Rank

問題 E: Page Rank - Indeedなう(オープンコンテスト) | AtCoder 解法 最初に全社員のPage Rank を1.0としておき、定義にしたがって1000回ほど計算すると収束する。 コード import java.util.ArrayList; import java.util.Arrays; import java.util.Scanne…

SRM 638 Div. 1 Easy: ShadowSculpture

問題 TopCoder Statistics - Problem Statement 解法 条件に反さないように立方体を置き、とりあえず立体を作る。 全ての立方体が接続されているとは限らないので、接続されている立体ごとに分け、その中に条件を満たすものが存在するかどうか確かめる。 コ…