# PTZSummer Day3 ## A 長さ n の数列 A が与えられる - A 内の任意の2つを削除 -> それらの xor を追加 の操作を n - 1 回行う **必ず1回だけ**どこかのタイミングで 任意のA[i] を +1 しなければならない 最終的に残る数字の最大値を求める ====== 総 XOR = X とする 操作過程で 011...11 みたいな状態を作ることができる -> 最終的な答えを X xor 111...11 にすることができる 下〇桁だけで基底作って 0 にできるかどうか ## B 木がある 葉に0~Nを書き込む 葉以外は子のmexになる 数列の書き方は$(N+1)^{葉の数}$あるがrootがiになるのはそれぞれ何通りか? n <= 200 自分の子の内,葉っぱと葉じゃない奴を区別 葉っぱの値 : [0, 200] 1 2 3 4 5 6 7 各頂点に 葉っぱが30 個ずつくっついてる 1 | 2 + 葉っぱ * 100 | 葉っぱ * 100 1 | 2 + 葉っぱ * 100 | 3 | 葉っぱ * 100 1,1,2,4, 子を葉、次数d以上、次数d未満に分ける d未満についてor畳み込み d以上については下から見て行って使った子の集合を持つ? ## C n, c が与えられる 長さ m の配列 A が良い配列である条件 - $$ A_i > 0 $$ - $$ |A_{i+1} - A_i| = 1 $$ - $$ \sum A_i = n $$ また. $$ f(A) := \sum[A_i > A_{i+1}] $$ とする 全ての良い配列 A に対して $c^{f(A)}$ の総和を求めろ (mod 998...) n <= 3 * 10^5, c < 998... TL: 16sec 初項 a \sqrt n 項 $$ (a + a - \sqrt n) * (\sqrt n) / 2 <= n$$ $$ (2a \sqrt n - n) / 2 <= n$$ $$ 2a \sqrt n <= 3n$$ $$ 2a <= 3\sqrt n$$ $$ a <= 3 / 2 \sqrt n$$ 長さが短い時 - prefix の max (\sqrt n) - 現在の長さm (\sqrt n) - 初項をaとした時 am + b の b の部分 (n) am + b = n a = (n - b) / m a a+1 a a-1 4a = n a = n/4 a a+1 a a+1 4a+2 = n a = (n-2)/4 ## D 平面上の座標が整数である全ての箇所に重みが 0 である点がある 以下のクエリを処理するデータ構造を作れ - 1 x y d w := |X - x| < d && |Y - y| < d を満たす全ての点(X, Y) の重みを w * (d - max(|X - x|, |Y - y|)) だけ増加させる - 2 x1 x2 y1 y2: x1 <= X <= x2, y1 <= Y <= y2 を満たす (X, Y) の点の重みの合計を (mod 2^{30}) で求めろ TL: 18sec ## E n 頂点の木が与えられる 以下の m 個のクエリ に答えろ k 個の頂点 x が与えられる あなたは x_1 から x_k まで順番に移動する.同じ頂点を複数回通るのはNG x_i -> x_{i+1} への移動方法は2種類 - 徒歩:x_i ~ x_{i+1}のパス上全ての頂点を通る - 舟:x_i から他の頂点を通らずにx_{i+1}にワープする 各x_iと,徒歩の際のパス上の全ての頂点について,同じ頂点を複数回通るのはNG 舟を使う回数を最小化しろ 1 | 2-3-4 | 5 1-5-2-4 葉を一つ選びます 葉のみのパスが存在する場合それを選ぶべき そうでない場合、葉を削除してよい 1 7 | | 2-3-4-6 | | 5 8 1 - 5 5 - 7 7 - 8 8 - 3 3 - 6 3 - 4 3-3 4-4 3-4 ## F n 頂点の木と整数Kが与えられる. 頂点iの重みは A_i である. 各頂点 i について,以下の問題に答えよ > 以下の条件を満たす頂点の部分集合の内,頂点重みの総和の最大値はいくつか > - 頂点 i を部分集合に含む > - 部分集合に含まれる頂点の個数は K である > - 頂点集合からなる誘導部分グラフは連結である N <= 40000, k <= 3000 A_i <= 500000 TL: 8sec TL が長いので 二乗の木dpっぽく + 全方位で更新とかを基本としてどこかしら高速化できるか? ## G n 頂点の木が与えられる 各頂点にラベル $l_u \in [0,m]$ を持たせてゲームをする. 以下の条件を満たすとき,あなたは勝利する. - 全ての $i \in [0, m]$ に対して,$i + 1$ 以上のラベルを持つ頂点群からなる誘導部分グラフは連結である 以下のクエリに Q 回答えろ - a_i, b_i : 頂点 a_i のラベルが b_i であるとき,他の頂点へのラベルのつけ方は $(m + 1) ^ {n - 1}$ 通りある. - このうち,勝利条件を満たすラベルのつけ方は何種類ある? n, q <= 10^5 m <= 30 TL: 4sec 最大値を取る頂点を根とすると,全ての辺について 親のラベル >= 子供のラベル を満たせばOK クエリ O(NM) 解 - 頂点 a_i に接する辺の内,1辺 or 0辺を増加方向へのラベル,それ以外を減少方向へのラベルとする - 増加方向へのラベル : 木dp をするときに,同じように増加方向へのラベルを 0 or 1 辺選択する - 減少方向へのラベル : 木dpをするときに,その先は全て減少方向へのラベルになる dfs(self, 今の頂点,前の頂点,前の頂点のラベル, 増加 or 減少) -> メモ化できそう 全部同じ値の時とかに重複して数えちゃう https://yukicoder.me/problems/no/1075 ## H ## I グラフGが与えられる グラフ H の線グラフが G となるようなグラフ H を求めろ or 存在しないことを証明しろ ググればありそう?検索OKになったらぐぐる https://www.nas.ewi.tudelft.nl/people/Piet/papers/JMMA2014_Iligra.pdf 線グラフの特徴 - サイクルは同じ長さのサイクルになる - パスは長さが 1 少なくなったパスになる ## J N個の素数が与えられる 少なくとも一つは100以下である 0以上p1*...*pN以下のうちN個の素数のいずれかで割り切れるものを列挙してソートする 隣接差分の2乗和を求めよ ## K 入力無し構築 set / xor / and / or / not / lshift / rshift で x * y mod 2^{64} を求めろ 並列計算ができて,実行時間も小さくしないといけないみたいでやばそう ## L ## M 各行各列に1が一つずつ存在する場合badである badなN×N Matrixであって、 サイズ(m+1)*(m+1)以上のサブ正方行列がbadでないものの数を求めよ 長さNの順列であってM+1以上N未満の長さLの連続部分列のmax-minがL-1ではない 1-Nを区切る 長さKの遷移は K!(K>M?-1:1) 最後に個数!をかけたい 長さによる遷移の多項式をfとすると ΣΣ[x^j]f^i * (N-j+i)! * Kの遷移の度に最後にかける数がK-1増える? これをfとすれば、 Σ[x^j]f^i * (N-j)! Σf^i = 1/(1-f) より多分いけた 上は嘘で、f_0=1,M以降は上の通りとすると Σ[x^N]f^i i! 嘘だが? ## N