アルゴリズム忘備録

競技プログラミングとかデータ分析とか

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

C: 茶碗と豆 - AtCoder Regular Contest 038

arc038.contest.atcoder.jp 位置iにある石を移動させるゲームを行う。位置iの石は左に1からC[i]の範囲で好きなだけ動かすことができる位置0にある石はそれ以上移動させることができない。先攻と後攻どちらが勝つか。 まずは位置iに石が1個ある時のGrundy数を…

E: Jigsaw - AtCoder Grand Contest 017

agc017.contest.atcoder.jp +字型の図形の情報が幾つか与えられる(正確な定義は問題文参照)。この図形を下辺が地面にピッタリ付くように並べていく。例えば┴みたいなのは延々と並べていける。与えられた図形をすべて用いてそのように並べることは可能か? …

E: Awkward Response - AtCoder Regular Contest 078

arc078.contest.atcoder.jp 公開されない整数Nが存在し、システムに整数nを入力とするクエリを出すと、下記の条件の時Yesが帰ってくる。 n≤N かつ str(n)≤str(N)を満たす n>N かつ str(n)>str(N) を満たす この時、最大64回の質問でNを特定せよ。 まず分かる…

D: Fennec VS. Snuke - AtCoder Regular Contest 078

arc078.contest.atcoder.jp 木が与えられる。頂点のうち、1点は白、もう1点は黒、残りは色なしの状態である。先手は白に塗られた頂点から隣接する頂点にだけ、後手は同様に黒の頂点だけ色を塗っていくことが可能である。ただし、既に塗られたところには上塗…

D: Game on Tree - AtCoder Grand Contest 017

agc017.contest.atcoder.jp 木の根を含まない部分木を交互に取り除いていき、操作ができなくなった(根しかない状態になった)ほうが負けとする。最適な行動を取る時先手後手どちらが勝つか? Green Hackenbushとかいう有名問題とのこと。明らかにGrundy数であ…

C: Snuke and Spells - AtCoder Grand Contest 017

agc017.contest.atcoder.jp 数列A[i]が与えられる。この数列は時刻tにX[i]番目がY[i]に変化する。時刻tでの数列に於いて、「k個の数がある時、kの数字を削除する」という操作を繰り返すことで数列を空にしたい。そのためには時刻tでの数列から何個の数字を変…

C: Splitting Pile - AtCoder Regular Contest 078

arc078.contest.atcoder.jp 数列a[i]が与えられる。|(a[1]+...+a[k]) - (a[k+1]+...+a[N])|を最小化せよ。 a[i]の累積和sum[i]を計算しておくと、(a[1]+...+a[k]) 及び (a[k+1]+...+a[N]) はそれぞれO(1)で計算可能。これでkを全探索すればよい。O(N)。

B: Moderate Differences - AtCoder Grand Contest 017

agc017.contest.atcoder.jp 長さNの数列を構成したい。最初と最後の要素がA, Bで与えられる。また、隣り合う要素同士の差はC以上D以下になるようにしたい。このような構成は可能か? 最初の要素を除くN-1個の要素について、k個が前の要素以上、N-1-k個が前の…

A: Biscuits - AtCoder Grand Contest 017

agc017.contest.atcoder.jp 数列A[i]が与えられるので、部分列をとってその和の余りを0または1にしたい。そのような部分列は何通りあるか? k番目までの数列の部分列をとったときにあまりが0または1になる組み合わせをa[0][k], a[1][k]とおく。A[k + 1]が奇…

C: 節約生活 - AtCoder Regular Contest 007

arc007.contest.atcoder.jp 最大10の周期でxoxooxoxxという並びが繰り返す。この周期と同じ周期を幾つか用いて、それぞれ任意の数だけずらして重ねたときに少なくとも1個の○が存在するようにしたい。最小でこの周期を何個使えばいいか。 周期の長さを持つ01b…

C: THE☆たこ焼き祭り2012 - AtCoder Regular Contest 008

arc008.contest.atcoder.jp N人の人が(x[i], y[i])にいる。それぞれ最大t[i]の速度でたこ焼きを投げられ、また最大r[i]までの速度で投げられたたこ焼きをキャッチできる。一人目の人が1秒おきにたこ焼きを投げ、その他の人もたこ焼きを受け取ったらそれを更…

E: guruguru - AtCoder Regular Contest 077

arc077.contest.atcoder.jp 整数xを一つ決める。ある数a[i]に対して、a[i] + 1 またはxに遷移する、という操作を行い、a[1]~a[n]までの遷移を実現する。この操作の回数が最小になるようにxを決めた時、その最小回数を求めよ。 素直にやるとO(NM)の問題で当…

D: 11 - AtCoder Regular Contest 077

arc077.contest.atcoder.jp 1~nの数で構成された、n+1個の数列が与えられる。この数列の中で、1~nはそれぞれ少なくとも1回以上は登場する。この時、長さ1~n+1の部分列で、異なる個数の総和を求めよ。 要はある数が一つだけダブっており、それ以外は全部1…

C: pushpush - AtCoder Regular Contest 077

arc077.contest.atcoder.jp 数列a[i]が与えられる。このa[i]とある空の別の数列b[j]について、bの末尾にa[i]を加え、bをreverseする、という操作をすべてのa[i]について繰り返す。最後にできる数列を求めよ。 毎回Reverseするのではなく、Nが偶数なら最後に…