ferinの競プロ帳

競プロについてのメモ

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

SRM 613 div1 easy TaroFriends

概要 太郎くんの友達がいる位置が1次元座標として与えられる。友達はそれぞれ1回、左か右にX動かなければならない。最長の友達の距離を最小化する。 考えたこと とりあえず入力をソートして考える。最初任意の回数移動できるのかと思い距離Dを達成できるかを…

SRM 612 div1 easy EmoticonsDiv1

考えたこと dp[i] = (i個をつくるのにかかる回数)としたO(n^2)のDPを投げたらシステスで落ちた。 解説読んで状態に(テキストの数、クリップボードの数)を取るdijkstraを書いた。

SRM 610 div1 easy TheMatrix

考えたこと この間のARC080Fとか最大長方形とかを思い出す 制約を見たらh,w 二次元累積和っぽく実装したら通った かなり簡単目だったのかO((HW)^2)が嘘解法だったのか…? 解法 (x, y)を左上、(w-1, h-1)を右下とする各長方形について、条件を満たす長方形を…

SRM 609 div1 easy MagicalStringDiv1

考えたこと ><><>'の数-' 罠 誤読 解法 i番目までの'>'の数を前から、i番目からn-1番目までの' ans = max(i番目までの'>'の数, i+1番目からn-1番目までの'

SRM 608 div1 Easy MysticAndCandies

考えたこと まず適当に箱を選んだ時その選び方が条件を満たしてるかの判定について考える 選んだ箱のlowの和をlsum、選んでない箱の和をhsumとする C-lsum-hsumが正ならその分選んだ箱のキャンディーの最低数が増える max(C-lsum-hsum, 0) + lsum >= X とな…

SRM 607 div1 easy PalindromicSubstringsDiv1

考えたこと 長さ5000以下なのでO(|S|^2)までいけそう dp[i][j] = (i番目までの文字列で長さjの回文がつくれる確率)を考える 区間[i+1, j)が回文かどうか前計算で求めておくのをとりあえず実装してみる この実装をしてたら幅が小さい方から埋めていくDPを最…

ARC 081 E - Don't Be a Subsequence

問題ページ arc081.contest.atcoder.jp 解法 まず、dp[i] = (区間[i, s.size())の部分文字列に含まれない最短の文字列の長さ)としたDPを考える。文字cがi番目以降ではじめて現れる位置をnext(i, c)と表記することにすると、このDPはdp[i] = min{dp[next(i, …

Codeforces Round #429 (Div. 2) 考察

コンテスト中に考えてたことをまとめてみることにした。解法解説とはちょっとちがうかも? 覚えてる範囲なので時間はずれてるかも? ~00:03 Aを読むと、各文字の出現頻度を数えてKと比べればよさそう。ささっと実装したらpretest通った~00:10 Bの読解が難…

Codeforces Round #429 (Div. 2) C. Leha and Function

問題ページ Problem - C - Codeforces 概要 関数 F(n, k)を次のように定める。 集合{1,2,…,n}からk要素を選んだ部分集合を全て列挙する。各部分集合の値をその部分集合の最小の要素の値とするとき、この値を平均をF(n, k)とする。 \sum F(a[i], b[i]) が最大…

Codeforces Round #429 (Div. 2) B. Godsend

問題ページ Problem - B - Codeforces 概要 n要素の数列が与えられる。player1は合計が奇数、player2は合計が偶数になる区間を選択して取り除くことができる。 行動できなかったら負け。勝つ方を求める。 解法 最初の数列の合計が奇数個だったら当然Firstの…

Codeforces Round #429 (Div. 2) A. Generous Kefa

問題ページ Problem - A - Codeforces 概要 n個の風船をk人の子供に配る。同じ子供に同じ色の風船を二つ以上配らないように全部の風船を配ることが出来るか 解法 各色の出現数の最大がk以下ならYes, そうでないならNo

Codeforces Round #200 (Div. 1) D. Water Tree

問題ページ Problem - D - Codeforces 概要 頂点1が根のn頂点の木が与えられる。q個のクエリを処理する。 クエリ1 頂点vとvの子孫の頂点の値を1にする クエリ2 頂点vとvの先祖の頂点の値を0にする クエリ3 頂点vの値を出力する 解法 部分木に関するクエリな…

Educational Codeforces Round 6 E. New Year Tree

問題ページ Problem - E - Codeforces 概要 n要素の根が1の木が与えられる。m個のクエリを処理しろ。 クエリ1 頂点vの部分木の頂点の色をcに変更する。 クエリ2 頂点vの部分木に含まれる色の種類を求める 解法 部分木に関するクエリを処理するのにオイラーツ…

hackerrankのGame Theoryを解いたまとめ

ゲーム系問題があつまっている。 https://www.hackerrank.com/contests/5-days-of-game-theory/challengesgrundy数とかNimとかの勉強によかった。 Game of Stones 2人のプレイヤーがいて各ターンで2,3,5個の石を取り除く行動ができる。行動できなくなったら…

nCkの偶奇

nCkの偶奇はlucasの定理から(n&k)==kで判定できるというのをTLで見かけたので調べた。mathtrain.jpC(0,0) = 1, C(0,1) = 0, C(1,0) = 1, C(1,1) = 1 となるので n_i = 0 で k_i = 1となるiがあれば偶数、なければ奇数となる。 n k n&k 0 0 0 0 1 0 1 0 0 1 1…

Croc Champ 2013 - Round 1 E. Copying Data

問題ページ Problem - E - Codeforces 問題概要 数列a, bが与えられる。次の2種類のクエリを処理する。 1. b[y+q] = a[x+q] ( 0 2. b[x]を表示する 解法 区間更新の遅延セグメントツリーを使う。遅延更新用の配列に更新する配列aのインデックスとの値の差を…

codeforces #261 div2 D. Pashmak and Parmida's problem

問題ページ Problem - D - Codeforces 概要 数列aが与えられる。f(l,r,x) を l 解法 まず、f(1, i, a[i])を計算する。それぞれの要素の個数を数える配列を用意して順に計算していけばよいが、a[i] b[i]>c[j]となるような(i,j)の組の個数を求めればいい。BIT…

codeforces #207 div1 A. Knight Tournament

問題ページ Problem - A - Codeforces 解法 [l_i, x_i)、(x_i、r_i]の区間でまだ誰にも負けていない兵士がいればその兵士はx_iに負けたとして更新していけばよさそう。すでに負けた、負けていないを管理するのが大変そうだったのでクエリを逆に読んで、管理…

cf #427 div2 D. Palindromic characteristics

問題ページ Problem - D - Codeforces 問題概要 k-palindromeを以下のように定義する。 文字列の左半分と右半分が空文字列ではなく一致している 左半分と右半分がともに(k-1)-palindromeである 1-palindromeは通常の回文と同様である。 文字列sが与えられる…

cf #427 div2 C. Star sky

問題ページ Problem - C - Codeforces 解法 t秒目での各星の明るさは(s[i]+t) % (c+1) で求められる。星の明るさは周期c+1で同じものが現れるのでc+1回分2次元累積和を取っておいて各クエリにO(1)で答える。同じ地点に複数の星が存在するケースがあることに…