kurarrr's memooo

主に競プロ備忘録

Warshall-Floyd の本質ミス

ミス o rep(k,N) rep(i,N) rep(j,N) d[i][j] = d[j][i] = min(d[i][j],d[i][k]+d[k][j]); x rep(i,N) rep(j,N) rep(k,N) d[i][j] = d[j][i] = min(d[i][j],d[i][k]+d[k][j]); なぜか Warshall-Floydの証明を考えれば明らか. 証明 Warshall-Floydが何をしてい…

AGC 027 B - Garbage Collector

問題 解法 本番中の考察 何回原点に戻ってくるかでXの係数が変わるのでこの回数を決めうちして1回O(N)でやったら部分点取れそう 部分最適構造( [l,r) 間のごみの最適なとり方が x=l,..,r として [l,x),[x,r) の最適なとり方を各々やってきたうちコスト最小の…

codeFlyer 2018 final C - 部分文字列と括弧

問題 問題概要 '(' と ')' のみからなる文字列Sがある. 1 <=i < j <=|S| で, S[i :j] が対応が取れているのは何組あるか. 1 <= |S| <= 105 思考と反省 考えたこと 構文木作れば k 個の子を持つ親を見つける度に kC2 足していけば出来る -> 再帰で実装しよう …

みんなのプロコン2018 決勝 A - Uncommon

問題 問題概要 自然数N,M と 数列 {a_i} (0 <= i < N) が与えられる. 各 j = 1, ... ,M について, jと互いに素なa_iの要素の数を求めよ. 1 <= N,M,a_i <= 105 解法 各jについて, 互いに素でない <-> 共通因数を持つ a_i の数を考えることにしよう. j = 5 の…

ARC 098 E - Range Minimum Queries

問題 問題概要 サイズNの数列からサイズKのsubarrayを選び,subarrayのminを取り除く試行をQ回行う. 取り除いたminのうちの max - min をminimizeするように試行を行った時のminを求めよ. 1 <= N <= 2000, 1 <= a_i <= 109 解法 思考箇条書き 単純に小さい順…

codeFlyer 2018 予選 D - ハンコ

問題 問題概要 NM のハンコをハンコがマスに収まるような範囲の全ての場所でHW のマスに押す. ハンコで黒く塗られるのは何箇所か求めよ. 1 <= N,M <= 103 ,1 <= H,W <= 109 解法 まず for(ハンコを押した回数) for(ハンコの全てのマス)のループの順序を入れ…

codeFlyer 2018 予選 C - 徒歩圏内

問題 問題概要 昇順に並んでいる数列{x_i} (1<=i<=N) が与えられる. (i, j, k) , (i < j < k) の組で, x_j - x_i <= D x_k - x_j <= D x_k - x_i > D を満たす組の総数を求めよ. 3 <= N <= 105 解法 補集合を考える. x_j - x_i <= D, x_k - x_j <= D を満た…

AGC 025 B - RGB Coloring

問題 問題概要 ブロックに0,A,B,A+Bのいずれかの得点をつけることができる 合計Kの得点をつける塗り方をmod 998244353で求めよ. 1 <= N,A,B <= 3105, 0 <= K <= 181010 解法 単純にDPを立てると,状態がO(NK)とかになってしまうので間に合わない. ここで問題…

ARC 097 E - Sorted and Sorted

問題 問題概要 1~Nの数字が書かれた白のボールと黒のボールがN個ずつ,合計2N個ある. 白と黒それぞれに注目した時,どちらも順番通りに並んでいるようにするには最低何回のswapが必要か. 1 <= N <= 2*103 解法 考察段階から箇条書き 最終状態が決まるとそのswa…

累乗の中にmodを入れる操作

ab = ab mod p-1 (mod p) が成り立つ. proof. フェルマーの小定理より ap-1 = 1 (mod p)なので,mod pにおいて ab = a^( (p-1)(floor(b/(p-1)) +(b mod (p-1))) = ( (ap-1)floor(b/(p-1))) * ab mod (p-1) = ab mod (p-1)

ARC 081 F - Flip and Rectangles

問題 問題概要 0,1が書かれているh*wの盤面がある. 行または列を全て反転する操作が何回でもできるとして, その中の要素が全て1であるような長方形の最大の面積を求めよ. 解法 ここの方法がわかりやすかったのでこれでやった. ex. 盤面 1 0 1 0 1 0 1 0 1 1 …

ARC 092 D - Two Sequences

問題 問題概要 N要素の数列{a_i}, {b_i} が与えられる. Xor_(1<=i,j<=N) (a_i + b_i) を求めよ. 解法 a_i + b_j のkビット目の1の数の偶奇を考える. x + y = ( x & y ) << 1 + ( x xor y ) から, (a_i , b_j のkビット目の立っている数) * N + (k-1ビット以…

AGC 022 C - Remainder Game

問題 問題概要 N要素の整数列{a_i}を以下の作業を繰り返して{b_i}に一致させる. - いくつかの要素を選び, a_i をa_i % k に変化させる. その際いくつ選んだかに関わらず コスト2kを払う 必要な最小コストはいくらか. 1 <= a_i, b_i, N <= 50 解法 a_i から a…

AGC 022 B - GCD Sequence

問題 問題概要 サイズN, 各要素が30000以下の次の条件を満たす数列を求めよ. - 全ての要素のgcdは1である(全ての要素が互いに素ということではない) - 全要素の和をSとして,全てのiに対して gcd(a_i, S-a_i) != 1 解法 gcd(a_i, S-a_i) != 1 <-> gcd(a_i, S)…

ARC 073 E - Ball Coloring

問題 問題概要 N組の計2N個の整数x_i,y_iを赤/青に分けていく. (Rmax - Rmin) * (Bmax - Bmin) を求めよ. 1 <= N <= 2*105, 1 <= x_i,y_i <= 109 解法 全体のmax,minであるma = max_i(max(x_i,y_i)), mi = min_i(min(x_i,y_i) は必ずR/Bに塗られているため, …

ARC 093 E - Bichrome Spanning Tree

問題 問題概要 N頂点M辺の重み付き無向グラフと整数Xが与えられる. この辺を2色に塗っていく. 次の条件を満たす辺の塗り方の数をmod 1e9+7で求めよ. - 2色どちらの色も含む全域木が存在して,そのような全域木の最小コストがXである. 1 <= N <= 103, 1 <= M <…

ARC 083 E - Bichrome Tree

問題 問題概要 1が根であるN頂点の根付き木が与えられる. また数列{x_i} (i=1..N) が与えられる. 木に白/黒と非負整数を割り振り,自身を含めた子に含まれる自身と同じ色の頂点の数の総和がx[i]であるようにしたい. そのように割り振ることはできるか. 解法 …

CSAcademy Round #50 (Div. 2 only) Min Races

問題 問題概要 N人から何人か選んで複数回レースをする. N人はKクラスに分かれている. また,N人の実力は決まっており,レースをするとその実力通りの順位になる. レースをした時,自分より順位が上の人全員が自分より上のクラスであるならその人は勝利となる. …

UTPC2014 D - ラボライブ タフグローバルフェスティバル

問題 解法 M=1,2 の場合は容易に解ける. 以降ではM=3とする. まず下準備として押す場所で同じ場所が連続して来る場合は結合して一つの区間にしておこう. とりあえず一番近い指を使う貪欲を考えてみると, p1 <--> 指1 <-> p2 <--> 指2 <-> 指3 , s1=2, t1 = s…

AGC 021 B - Holes

問題 解法 前提知識: 凸包 (ググればいっぱい出てくる) Rが十分に大きいので数学的にINFだとして考察していく. 各点に落ちるような領域は与えられた二点の全ての組を取った垂直二等分線で区切られる(ボロノイ図と言うらしい) R=INFなので,この領域が有限領域…

ARC 068 E - Snuke Line (700)

問題 問題概要 N個の区間[l_i,r_i],自然数Mが与えられる. 1 <= d <= Mについて,dの倍数を含む区間はいくつあるかそれぞれ答えよ. 1 <= N <= 3*105, 1 <= M <=105 解法 各dについて dの倍数を含むような区間を数え上げていく. 愚直にやろうとすると [1,M] の …

yukicoder No.595 登山

問題 問題概要 要素数Nの数列{a_i}とコストPが与えられる. 任意の場所へのワープにはコストP,隣接するiからjへのの移動にはmax(0,a[i]-a[j])かかる時,全ての点を訪れる最小コストを求めよ. 2 <= N <= 2*105, 0 <= P,a[i] <= 109 解法 1 普通のDP 解説が詳し…

yukicoder No.649 ここでちょっとQK!

問題 問題概要 自然数K,Qが与えられる.以下のクエリQ個を処理せよ. 1. 配列に値Xを挿入する 2. 配列のK番目に大きい値を出力し,削除する 1 <= Q,K <= 2*105, 1 <= X <= 1018 解法 想定解で解いた. minキューとmaxキューを用意し,maxキューにはK番目に小さい…

yukicoder No.196 典型DP (1)

問題 問題概要 N頂点の0を根とする木が与えられる. 木を白黒に塗る. ある頂点が黒の時,その子が全て黒であるという制約を満たしながら塗る時,黒の数がKであるのは何通りか. 解法 dp[i][j] := (i頂点以下で黒がj個の場合の数)とする. 初期値は dp[i][0] = 1, …

ARC 060 E 高橋君とホテル

問題 問題概要 直線上のN個の点x_iが与えられる. 1回に合計距離Lまでの点から点への移動が可能として, 以下のQ個のクエリを処理せよ. - a,b間の移動には何回移動が必要か 1 <= N <= 105, 1 <= Q <= 105 解法 r[i][k] := (iから2k回正方向に移動してたどり着…

Typical DP Contest H - ナップザック

問題 問題概要 N個の荷物の重さwi,価値vi,色ciが与えられる. 重さW以下,色C色以下で達成できる最大価値を求めよ. 1 <= N <= 100,1 <= W <= 105, 1 <= C <= 50 解法 dp(i,j) := (i色以下,重さj以下で持てる最大価値) としてdp(i,j)を更新していく. w,vは色ご…

Educational Codeforces Round 38 D. Buy a Ticket

問題 問題概要 N頂点M辺の無向グラフと各辺の距離が与えられる. また各頂点に対してコストc[i]が与えられる. 各i (1<=i<=N)に対し min_j(2dist(i, j)+c(j))を求めよ. 2 <= N <= 2105, 1 <= M <= 2*105 解法 Dijkstraで各頂点とそのコストを初期位置としてキ…

Educational Codeforces Round 38 C. Constructing Tests

問題 問題概要 0,1からなる行列で,どのMxMの小行列をとってもいずれかの要素に0が含まれる行列をM-free Matrixという. 整数xが与えられ,1の要素数を最大化したNxNのM-free Matrixで,1の要素数がxであるようなN,Mを答えよ. というクエリがt個与えられるので各…

ARC 058 E - 和風いろはちゃん / Iroha and Haiku

問題 問題概要 整数N,X,Y,Zが与えられる. 整数1〜10から成り,XYZを含む要素数Nの数列をmod1e9+7で求めよ. なお{a_i}がXYZを含むとは sum(x<=i

ARC 081 E - Don't Be a Subsequence

問題 問題概要 英小文字から成る文字列Sが与えられる. Sの部分列でないような最短の文字列を求めよ. ここでS'がSの部分列とは S'[i] = S[a_i] (1<=i<=|S'|) なる単調増加なa_iが存在するものとする. 解法 まず,S[i,N)で一番最初に出てくる文字j(j='a'〜'z')…