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

Codeforces Round #299 Div2 E: Tavas and Malekas (Z Algorithm)

問題 Problem - D - Codeforcescodeforces.com 解法 Z Algorithm を使って文字列の各位置における最長の一致prefixを計算しておく。文中で文字列が交差した際に、計算した条件に合わなければ0を返せば良い。 コード import java.util.Scanner; public class …

Codeforces Round #301 Div2 E: Infinite Inversions (Binary Indexed Tree)

問題 Problem - E - Codeforces 解法 下記リンクで丁寧に解説されている。 Codeforces Round #301 (Div. 2) E. Infinite Inversions - mayoko’s diary Codeforces #301 Div2 E. Infinite Inversions - kmjp's blogBinary Indexed Tree については以下の問題…

Codeforces Round #301 Div2 D: Bad Luck Island (動的計画法)

問題 Problem - D - Codeforcescodeforces.com 解法 (r,s,p)から(r-1,s,p),(r,s-1,p),(r,s,p-1)に遷移するので、渡すDPを書く。 コード import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(…

Codeforces Round #303 Div2 E: Paths and Trees (ダイクストラ法)

問題 Problem - E - Codeforcescodeforces.com 解法 まずダイクストラしてスタートからの距離を求めておく。あとは、スタート地点に戻っていくイメージで必要な道を貪欲に集めていけば良い。 コード import java.util.ArrayList; import java.util.Arrays; i…

Codeforces Round #303 Div2 D: Queue (貪欲法)

問題 Problem - D - Codeforcescodeforces.com コード import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[] people = ne…

Codeforces Round #303 Div2 C: Woodcutters (動的計画法)

問題 Problem - C - Codeforcescodeforces.com 解法 i+1番目の木にとっては、i番目の木が左側に倒れているか否かが分かれば良いので、渡すDPを書く。 コード import java.util.Scanner; public class Main { public static void main(String[] args) { Scann…

AtCoder Regular Contest 038 C: 茶碗と豆(grundy数・セグメント木・二分探索)

問題 C: 茶碗と豆 - AtCoder Regular Contest 038 | AtCoderarc038.contest.atcoder.jp 解法 AtCoder ARC #038 : C - 茶碗と豆 - kmjp's blogkmjp.hatenablog.jp コード import java.util.Arrays; import java.util.Scanner; public class Main { public sta…

AtCoder Beginner Contest 023 D: 収集王(二分探索)

問題 D: 射撃王 - AtCoder Beginner Contest 023 | AtCoderabc023.contest.atcoder.jp 解法 二分探索でスコアを探索する。 コード import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scann…

AtCoder Beginner Contest 023 C: 収集王(片側全探索)

問題 C: 収集王 - AtCoder Beginner Contest 023 | AtCoderabc023.contest.atcoder.jp 解法 AtCoder ABC #023 : Python練習編 - kmjp's blogkmjp.hatenablog.jp コード import java.util.Scanner; import java.util.TreeSet; public class Main { private st…

TopCoder SRM 659 Div1 Easy: ApplesAndOrangesEasy(貪欲法)

解法 前からフルーツを見ていって、そのフルーツからKの範囲内にリンゴがK/2個以内なら、そのフルーツをリンゴにしても良い。 コード public class ApplesAndOrangesEasy { public int maximumApples(int N, int K, int[] info) { boolean[] isApple = new b…

TopCoder SRM 631 Div1 Easy: TaroJiroGrid

解法 TopCoder SRM 631 Div1 Easy TaroJiroGrid - kmjp's blogkmjp.hatenablog.jp コード public class TaroJiroGrid { public int getNumber(String[] grid) { int N = grid.length; char[][] map = new char[N][]; for (int i = 0; i < map.length; i++) {…

TopCoder SRM 630 Div1 Easy: Egalitarianism3 (グラフ)

解法 ワーシャルフロイトで2点間の最短距離を出しておく。2点を選び、その2点を含む集合を求め、その最大値を返せば良い。 コード import java.util.ArrayList; public class Egalitarianism3 { public int maxCities(int n, int[] a, int[] b, int[] len) {…

Codeforces Round #301 Div2 C: Ice Cave

問題 Problem - C - Codeforcescodeforces.com 解法 考えなければならないことは以下の2点のみ。 ゴールに辿り着けるのか 幅優先探索で調べれば良い。 最短距離で辿り着ければ良いので、一度通ったマスの情報は保存しなくて良い。 ゴールに辿り着けたとして…

TopCoder SRM 658 Div1 Easy: OddEvenTree (グラフ)

解法 TopCoder SRM 658 Div1 Easy: OddEvenTree - roiti46's blogroiti46.hatenablog.com誤読で撃墜…… 1363 -> 1293 つらい…… コード import java.util.ArrayList; public class OddEvenTree { public int[] getTree(String[] x) { int N = x.length; int[] …