Codeforces Round 1057

A. Circle of Apple Trees

単に種類数が答です.

B. Bitwise Reversion

桁ごとに独立な問題です.$a,b,c$ としてありうる $8$ 通りを試せばよいです.

C. Symmetrical Polygons

奇数回登場する辺は,対象軸にかかわる高々 $2$ 個です.

全部の種類を偶数回使う場合:$4$ 角形以上ならばよくて,貪欲に採用していけば判定できます.

奇数種類を $1$ 個使う場合:他の辺は可能な限り偶数個ずつ選んだ場合を判定すればよいです.使う $1$ 個を全探索すればよいです.

奇数種類を $2$ 個使う場合:短い方を $a$,長い方を $b$ とします.この場合には,やはりこの $2$ 個を除外した上で,可能な限り偶数個ずつ選ぶ場合だけを調べればよいです.また,$b$ がその他の長さの和に対して大きすぎないかを判定するということになります(他の長さが半分以上にならないことは自明).このとき

  • $a$ の長さが余るならば,それを足しても解になる.
  • $a$ より長くて $b$ より短い長さが余っているならば,$a$ をそれに取り換えても解になる.

ことから,$a$ は奇数回現れるものの中でなるべく大きいものだけを調べればよいことになります.

D. Not Alone

「$2$ つ組以上に分割する」と思えます.大きさ $4$ 以上の組は,大きさ $2$ の組とその他に分割できて,組の大きさはすべて $3$ 以下であることを仮定できます.

よって,まず円環要素を無視すれば,長さ $2$ または $3$ の subarray に分割して,各 subarray を定数列にするという問題です.これは簡単な dp でできます.

円環でも,列の端が分割境界になっていることを仮定して解くことを,全体を rotate しながら数回やれば大丈夫です.

関連:

E. Zero Trailing Factorial

読解がやや大変.$n$ や $m$ の和がおさえられていないことに注意.

おおよそ $v_k$ の定義は素べきに対する $\min$ で,$w_k$ の定義は $v_k$ の $\min$ であることから,$f_m$ の定義は素数べき $p^e\leq m$ に対する $\min$ だと思ってよいです.

$n$ 以下の最大の素数を $p_{max}$ としたとき,$1\leq x < p_{max}$ に対しては $f_m(x,n)=0$ です.これは $k=p_{max}$ ととれば分かります.

よって,$p_{max}\leq x\leq n-1$ という $x$ の範囲だけを計算すればよく,これはせいぜい数百個です(参考).

$p^e$ も $m$ 以下に $m/\log m$ 個程度しかないのでまあまあ少ないです.

ちょっと計算量は怪しいですが,あとは $x, p, e$ を全探索するという要領で解けます.$v_p(x!)$ は定義通りに計算しましたが,連番に対して計算するときに,$x$ が $p$ の倍数でない場合には直前での計算結果を使いまわせるという高速化を入れると AC になりました.

$p$ としては $[p_{max},N]$ の素因数に現れるものだけを調べればよく,これをやると計算量が prime gap の多項式になります.

F. Odd Queries on Odd Array

「cute array」 という設定を完全に無視して解きました.

計算量は $O((N+Q)\sqrt{N})$ です.10sec あるので十分高速にやれば何とかなります.

簡単のため $N=K^2$ として,$L, R$ が $K$ の倍数であるような場合の答をまずは計算しておいて,テーブルに格納しておきます.

あとはクエリが来るたびに,そのような区間と頻度の差が生じるものについて補正します.それだけです.「$x$ は $[KL,KR)$ に偶数個、奇数個どちらですか?」というタイプの計算が欲しくなります.$1.5$ 乗メモリは使いたくない制約ですが,ここは区間和のとれる bit vector を使えば空間 $O(N^{1.5}/w)$ になるので大丈夫です.

高速化要素としては,例えば $K$ の倍数である場合との比較において,$L,R$ の伸縮をしますが,これは「縮める」「伸ばす」のうちコストが安そうな方を選べばよい,という高速化をしました.あとは単純に,前計算のうち $1.5$ 乗かけていた部分を可能なら $1$ 乗にしたりすると,AC になりました.

CodeForces
スポンサーリンク
シェアする
maspyをフォローする
maspyのHP
タイトルとURLをコピーしました