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

119AC - ABC064C: Colorful Leaderboard

ABC064-C (300 points) 問題 人のAtCoder参加者(それぞれのレートは で与えられる)がいるとき, 色の種類数の最小値と最大値を求める. ただし, レート3200以上の人は好きな色を選べるものとする. 入力は全て整数 方針 レート3200未満の人は人権がないので, …

116AC - ABC065C: Reconciled?

ABC065-C (300 points) 問題 犬が 匹, 猿が 匹いるとき, 犬同士, 猿同士が隣り合わない並べ方の総数を求める. ただし, 犬同士, また猿同士は互いに区別する. 方針 犬同士, 猿同士が隣り合わないように並べられる ⇔ 犬の数と猿の数の違いが 以内である あとは…

113AC - ABC066C: pushpush

ABC066-C (300 points) 問題 数列 が与えられたとき, 以下の操作によってできる数列 を求める. 回目の操作で を の末尾に追加する. を逆向きに並び替える. の初期値は空の数列. 方針 実験すると法則性が見えてくる 数列 の左端は , 右端は 中心に向かって添…

110AC - ABC067C: Splitting Pile

ABC067-C (300 points) 問題 数列 に対して, , とするとき, に関する の最小値を求める. 方針 に対して を求め, 絶対値を取って暫定解を更新していく. 一重forなので間に合う. # input N = int(input()) A = list(map(int, input().split())) sum_A = sum(A)…

107AC - ABC068C: Cat Snuke and a Voyage

ABC068-C (300 points) 問題 個の頂点と 本の枝からなるグラフが与えられたときに, 頂点 から頂点 に距離 で到達可能か判定する. ただし頂点 間に枝はないものとする. 方針 頂点 から距離 の頂点, 頂点 から距離 の頂点をそれぞれ列挙. それぞれの集合に共通…

106AC - Minimization

ABC101-C (300 points) 問題 長さ の数列 がある. ただし は を並び替えたもの. 個の連続した要素を選び, 選んだ要素それぞれの値を, 選んだ要素の中の最小値で置き換える. という操作を繰り返して, 数列の要素を全て等しくするとき, 必要な操作の回数の最小…

101AC - ABC069C: 4-adjacent

ABC069-C (400 points) 問題 長さ の数列 が与えられたときに, 各 について が の倍数であるように要素を並び替えられるかを判定. 入力は全て整数 方針 奇数の前後は必ず の倍数 の倍数でない偶数の前後は必ず偶数 邪魔なのは奇数なので, 奇数と の倍数を先…

100AC - ABC070C: Multiple Clocks

ABC070-C (300 points) 問題 それぞれ 秒で針が 回転する 台の時計がある. 全ての時計の針が真上を向いている状態からスタートして, 次に全ての時計の針が真上を向くのは何秒後か. 入力は全て整数 答えは 秒以内 方針 最小公倍数を求めるのみ. ググるとたく…

97AC - ABC071C: Make a Rectangle

ABC071-C (300 points) 問題 本の棒の長さがそれぞれ であるとき, この中から異なる4本を選んでできる長方形のうち, 面積が最大になるものを求める. 入力は全て整数 方針 棒の長さでソート→長い方から順に見ていって 2 本 × 2 ペア見つかったら終了 # input …

94AC - ABC072C: Together

ABC072-C (300 points) 問題 長さ の数列 の各 に対し, に を足す, 引く, 何もしないのいずれかの操作をする. この操作の後, ある整数 を選んで, となる の個数を数える. うまく操作を行い, を選ぶことで,この個数を最大化する. 入力は全て整数 方針 二つの…

91AC - ABC073C: Write and Erase

ABC073-C (300 points) 問題 長さの数列 に奇数回出てくる数字の個数を数える. 入力は全て整数 方針 素直に書く→TLE Aをソートして, 先頭から順番にそれぞれの数字がいくつ連続しているか数えていく ソート + 数列を1回探索 # input N = int(input()) A = [i…

88AC - ABC074C: Sugar Water

ABC074-C (300 points) 問題 操作 1: ビーカーに水を 100A [g] 入れる。 操作 2: ビーカーに水を 100B [g] 入れる。 操作 3: ビーカーに砂糖を C [g] 入れる。 操作 4: ビーカーに砂糖を D [g] 入れる。 操作 1, 2, 3, 4 をそれぞれ i, j, k, l 回行って濃度…

83AC - ABC100C: *3 or /2

ABC100-C (300 points): 解けた... 方針 3をかけるのはいつでもできる、制約になるのは2で割る操作 なので2で割るのは毎回1つまで 数列に含まれる数字を全て素因数分解したときに2がいくつ含まれるかを数える # input N = int(input()) A = list(map(int, in…

80AC - ABC075C: Bridge

ABC075-C (300 points): 橋の列挙 方針 橋を列挙しましょう, という問題なので, そのまま橋を列挙するのみ=アルゴリズムを知っていれば考察は全くいらないけども, 実装で詰む. とりあえず2つのアプローチがあるけども, ライブラリ化しておくと便利そう, と…

61AC - ABC077C: Snuke Festival

ABC091-C (300 points) import bisect as bi # input N = int(input()) A = sorted(list(map(int, input().split()))) B = sorted(list(map(int, input().split()))) C = sorted(list(map(int, input().split()))) count = 0 for b in B: i = bi.bisect_left…

59AC - ABC078C: HSI

ABC078-C (300 points) # input N, M = map(int, input().split()) ans = (2 ** M) * (1800 * M + 100 * N) print(ans)

56AC - ABC087C: Candies

ABC087-C (300 points) # input N = int(input()) A = [list(map(int, input().split())) for i in range(2)] ans = 0 for i in range(N): tmp = 0 for j in range(i + 1): tmp += A[0][j] for k in range(i, N): tmp += A[1][k] if tmp >= ans: ans = tmp p…

54AC - ABC091C: 2D Plane 2N Points

ABC091-C (400 points) # input N = int(input()) lst_red = [list(map(int, input().split())) for i in range(N)] lst_blue = [list(map(int, input().split())) for i in range(N)] lst_red.sort(key=lambda x: x[1], reverse=True) # yの大きい順 lst_bl…

52AC - ABC094C: Many Medians

ABC094-C (300 points) # input N = int(input()) X = list(map(int, input().split())) X_sorted = sorted(X) a1 = X_sorted[N // 2 - 1] a2 = X_sorted[N // 2] for i in range(N): if X[i] <= a1: print(a2) else: print(a1)

51AC - ABC095C: Half and Half

ABC095-C (300 points) A, B, C, X, Y = map(int, input().split()) ans = 0 if A + B >= 2 * C: if Y >= X: if B >= 2 * C: ans = 2 * C * Y else: ans = 2 * C * X + B * (Y - X) else: if A >= 2 * C: ans = 2 * C * X else: ans = 2 * C * Y + A * (X - …

42AC - ABC097C: K-th Substring

ABC097-C (300 points) s = input() K = int(input()) sub = set() for i in range(len(s)): for j in range(i + 1,i + K + 1): sub.add(s[i:j]) ans = list(sorted(sub)) print(ans[K - 1])