ferinの競プロ帳

競プロについてのメモ

競技プログラミング

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個の石を取り除く行動ができる。行動できなくなったら…

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)で答える。同じ地点に複数の星が存在するケースがあることに…

cf #426 div2 C. The Meaningless Game

問題ページ Problem - C - Codeforces 考えたこと 色々数字をいじっていたらそれっぽい解法が思いついて投げたら通った。 gcdを求めたあと素因数分解をしたくなったが、a、bが大きな素数のときに計算時間が怖かったのでこの方針は捨てた。 立法数判定だけな…

cf #426 div2 B. The Festive Evening

問題ページ Problem - B - Codeforces 解法 各文字について最初に現れるタイミングと最後に現れるタイミングを調べてimosする。

cf #426 div2 A. The Useless Toy

問題ページ 解法 操作には周期4の周期性があるので周期性を使って判定する。

ARC079D Decrease (Contestant ver.)

問題ページ D - Decrease (Contestant ver.) 解法 n=50で考える。 k=0のとき 49 49 49 … 49 とする。 k=1のときは1回操作してこの数列になればよいので 99 48 48 … 48 k=2でも同様に 98 98 47 47 … 47 これを繰り返していくと、 k = 50 で 50 50 50 … 50 k =…

ARC079 C Cat Snuke and a Voyage

問題ページ C - Cat Snuke and a Voyage dijkstraで殴った

第3回 ドワンゴからの挑戦状 予選 D - ネタだけ食べたい寿司

dwacon2017-prelims.contest.atcoder.jpnnのときについて考える。 i番目までの寿司を食べるとすると、i番目をネタだけ食べ、1からi-1番目の中でネタだけ食べた時の幸福度の上昇が大きいものm-1個を選ぶのが最適な食べ方となる。そこで、i番目までの寿司でネ…

ukuku09コンテスト 001-photography

Hamako Online Judge区間と言われたので累積和を取りたくなる。累積和をSで書くことにするとl番目の要素を区間の左端とするとき P+S[l-1] 以上のもっとも右にある要素の位置が分かればl番目が区間の左端のときの最適な区間が求まる。右端がO(1)かO(logn)くら…

SRM716 div2 hard

概要 最初のm個がp[i] != iとなっているという条件を満たす長さn+mの順列pの個数をmod 10^9+7で求める。 解法 条件がなかったとしたら順列の個数は(n+m)!となる。次にm個のうち1個が条件を満たしていない個数を考える。m個の中から1個を選び、残りのm+n-1個…

SRM 716 div2 med

概要 文字列sと文字列tが与えられる。sの各文字をtの文字で置き換えることができる。tの文字はそれぞれ1回ずつしか使用できない。書き換えた後の辞書順最大となるsを出力する。 解法 先に現れる文字を大きいものにしたほうが辞書順としては後のものになる。…

SRM 717 div2 easy

概要 要素が0か1の2次元配列tが与えられる。x[i] xor y[j] == t[i][j] となる要素が0か1の配列x、yを構成することが可能か判定する。与えられる配列のサイズは5×5以下。 解法 1行目(y[0])を0か1で固定すれば残りの列の数字(x[i])は一意に定まる。残りの行に…

経験した罠

自分がやらかした実装ミス(罠踏んだら追加する) #define int ll 区間l, rに対してmodを取るときにl > rとなっているときを考慮しない 負の数にMODをとって正の値がほしいところに負の値をつっこむ int -> double へのキャストをしない 配列サイズ足りない …

TDPD I イウィ

tdpc.contest.atcoder.jp区間DPの問題。AOJ 1161ダルマ落としと似てる。dp[l][r] = {lからrまでの区間で操作をできる回数}としてDPする。 区間lからrで間の区間(l+1からr-2orl+2からr-1)が全て削除でき、削除したあとに残る文字列がiwiならばその区間は全て…

AOJ 1161 ダルマ落とし

Daruma Otoshi | Aizu Online Judgedp[l][r] = {lからrまでの区間の状態}と持ってDPする、区間DPの問題。 この問題ではdp[l][r] = {lからrまでの区間で叩ける最大のブロック数}とする。 dp[l+1][r-1]の区間が全てのブロックを叩き出すことができ、l番目とr番…

AGC014 A,B,C,D

agc014.contest.atcoder.jp公式解説(pdf) Editorial - AtCoder Grand Contest 014 | AtCoder公式動画解説 www.youtube.com A問題 問題の得点からそんな難しい問題ではないだろうと決め打ちしてlog_2(max(a, b, c))回でシミュレーションが実行できそうだと考…

AOJ2254 Fastest Route

Fastest Route | Aizu Online JudgeまずNdp[S] = (集合Sをクリアするのにかかる最短時間)とする。 dp[S]は集合Sから要素を一つ取り除いた集合をクリアするのにかかる最短時間 + 集合から取り除いたステージをクリアするのにかかる最短時間と考えられるので…

AOJ 0043-Puzzle

パズル | Aizu Online JudgeDFSで面子と雀頭の取り方を全て試す。

DPL_4 B Coin Combination Problem II

Coin Combination Problem II | Aizu Online JudgeN

DPL_1 E Edit Distance (Levenshtein Distance)

dp[i][j] = (s1のi文字目まででs2のj文字目までを作る最小コスト) としてDPします。 各文字列に対する操作についてDPの遷移を考えると 挿入 dp[i][j] = dp[i][j-1] + 1 削除 dp[i][j] = dp[i-1][j] + 1 置換 dp[i][j] = dp[i-1][j-1] + 1 となります。さらに…

SRM 710 div2

Easy 問題概要 解法 Med 問題概要 解法 Hard 問題概要 解法 Writerの方の解説 codeforces.com Easy 問題概要 n要素の配列Aが与えられる。この配列の部分列の和を最大化したい。ただし、配列の最初の要素のA[0]を選択した場合、部分列の和の正負を反転させる…

codeforces #393 div2 A, B, C

問題A 問題概要 解法 問題B 問題概要 解法 問題C 問題概要 解法 codeforces.com 問題A 問題概要 月とその月が何曜日から開始するかが与えられる。この月で1週間ごとに列が切り替わるカレンダーを作成する際、カレンダーは何列になるか。 解法 1, 3, 5, 7, 8,…

codeforces #403 Div2 A, B, C

A問題 問題概要 解法 B問題 問題概要 解法 C問題 問題概要 解法 codeforces.com A問題 問題概要 n組の靴下が袋の中に入っておりそれぞれペアごとに揃えたんすにしまいたい。袋の中から1つずつ取り出して机に並べる。そして、靴下が組になった時点でたんすに…

codeforces #402 div2 A, B, C, D

問題A 問題概要 解法 問題B 問題概要 解法 問題C 問題概要 解法 問題D 問題概要 解法 codeforces.com 問題A 問題概要 n人の生徒が属する2つのグループA, Bがある。各生徒は1から5の5段階の成績がつけられている。グループ間で生徒を交換することでそれぞれの…

Codeforces #401 A, B, C, D

A問題 問題概要 3個の箱の中にボールを隠しました。規則にもとづいて箱の位置を交換します。移動させた回数が奇数のときは左と真ん中の箱、偶数のときは右と真ん中の箱を入れ替えます。移動させた回数と最後にボールがあった場所から最初にボールがあった位…

ARC023 B問題-謎の人物X

arc023.contest.atcoder.jpD回移動した後にたどり着ける点はD回移動の範囲内に収まり偶奇が一致する点です。したがってたどり着ける点についての全探索でO(RC)で解けます。

ARC022 B問題-細長いお菓子

arc022.contest.atcoder.jp重複した数が存在しない最大の領域を求める問題です。重複した数が存在するかどうかの判定ををunordered_setで行いました。unordered系のデータ構造はじめて使ったんですが衝突さえしなければO(1)でできるの便利ですね… 解いている…

XOR

排他的論理和(XOR)についての性質のメモ A^B = (A&!B)|(!A&B) = (A|B)&(!A|!B) = (A|B)&(!(A&B)) A^B = B^A(交換則) (A^B)^C = A^(B^C) (結合則) A^A = 0 A^B = 0 ならば A = B a, b, c…が0か1のとき、 a^b^…^c = 1 (1が奇数個) 0 (1が偶数個)

TopCoderの設定

登録方法 applet ダウンロード Javaの更新 セキュリティ例外 設定 プラグインの導入 practice(過去問) TopCoderについての設定や問題の解き方についてのメモです。OSはWindows10です。 登録方法 TopCoderにアクセスし右上の「LOG IN」をクリック、「COMMUN…

トポロジカルソート

トポロジカルソートについて調べた内容のメモです。 トポロジカルソートとは 閉路がない有向グラフの各有向辺が順方向になるようにソートすることをトポロジカルソートと呼びます。DAG(有向無閉路グラフ)にのみ行うことができ、トポロジカルソートが行えれば…

ABC015-D問題

abc015.contest.atcoder.jpナップザック問題でk個のみつかえるという制約を加えたような問題です。ナップザック問題で持つ状態に加えて今までに使用したスクリーンショットの枚数を状態として持つことで解けます。まずメモ化再帰で実装しました。次に動的計…

ABC008-D問題

abc008.contest.atcoder.jp 蟻本で似た問題(P121, Bribe the Prisoners)を見たことがあったので同じように考えて実装しました。機械を動かしたあとその機械で取った金塊で分断された場所は互いに関係しない独立した場所です。なので、ある機械を動かしたと…

ABC037-D問題

abc037.contest.atcoder.jp解説通りf(y, x) を再帰的に求めて全てのf(y, x)を足す感じで実装しました。定番のメモ化再帰という印象の問題でした。

ABC038-D問題

abc038.contest.atcoder.jp解説読んでもわからなかったBainary Indexed Tree(BIT)ってなんだよ!ってのとソートの方法を指定する方法についてのメモ。 BITについては以下のスライドが分かりやすかったです。和ではなくその区間の最大値を保存することである…

ABC040D

abc040.contest.atcoder.jpUnionFindをある程度理解したあとだったので解法が何をやっているのかは割と早く理解できましたが、実装に手間取ってしまいました… 年をキーとして2つの値をもつ組を降順にソートする必要があります。最終的にvectorvector > を使…

ABC041D

abc041.contest.atcoder.jp解説を読んでも満点解法がなかなかわからず苦労したのでそのメモです。 まずトポロジカルソートは有向辺が全て1方向へ向くようにソートをソートをすることです。入力例1についてトポロジカルソートを行ってみると以下の2通りになり…

ABC049D

abc049.contest.atcoder.jp自力では手も足も出なかったのでeditorialと解説放送を参考に実装しました。 youtu.be https://youtu.be/jvAX9Z7beLgグラフの連結を管理するために、グループ分けを管理するためのデータ構造であるUnion-Find木を使います。 道路で…

ABC030を解いてみた

abc030.contest.atcoder.jp A問題 if文で比較しました。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 #define INF 1000000000 #define PI 3.14159265359 int main(void) { double a, b, c, d; cin >> a >> b >> c >> d; i</bits/stdc++.h>…

ABC029を解いてみた

abc029.contest.atcoder.jp A問題 文字列の最後にsを連結しました。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 #define INF 1000000000 #define PI 3.14159265359 int main(void) { string s; cin >> s; cout << s + 's</bits/stdc++.h>…

ABC028を解いてみた

abc028.contest.atcoder.jp A問題 条件に合わせて分岐して出力しました。Perfectのスペル間違えてWA出したので気をつけたい。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 #define INF 1000000000 #define PI 3.141592653</bits/stdc++.h>…

ABC027を解いてみた

abc027.contest.atcoder.jp A問題 長方形は向かい合っている辺の長さが等しいです。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 #define INF 1000000000 #define PI 3.14159265359 int main(void) { int a, b, c; cin >></bits/stdc++.h>…

ABC025を解いてみた

abc025.contest.atcoder.jp A問題 入力をソートして(n-1)/5文字目、(n-1)%5文字目が答えの文字列になります。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 int main(void) { vector<char> str; string ans = "", temp; int n; c</char></bits/stdc++.h>…

ABC026を解いてみた

abc026.contest.atcoder.jp A問題 x=1からx=a-1まで全探索で実装しました。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 int main(void) { int a, ret = 0, maxret = -1; cin >> a; for(int x=1; x</bits/stdc++.h>

ABC024を解いてみた

abc024.contest.atcoder.jp A問題 条件に沿って実装しました。 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 int main(void) { int a, b, c, k, s, t, ans = 0; cin >> a >> b >> c >> k; cin >> s >> t; if(s+t >= k) ans</bits/stdc++.h>…