まずパスで考察すると見通しが良い
二次元ゲームは図を書くとよい
困ったら二分探索
まずパスで考察すると見通しが良い
二次元ゲームは図を書くとよい
困ったら二分探索
と重めだが高度な fps を用いない方法。
について、以下を満たす長さ の数列 の個数を求めよ。
に を足して、 と言い換えておきます。また、 の時の答えを と表記します。
ここで、 かつ を満たす の個数を とおくことにして、 とすると、 が成り立ちます。(これは ABC288Ex の解説とかで触れられてると思います)よって、 を求めることができればよいです。
今後、以下が成り立つことを利用します。( が偶数の場合未証明、実験で導きました)
KUPC2017K の 別解 と同じように、上の桁から考察していきます。いま 桁目を見ているとします。 ともに 桁目が ならば 桁目に移ります。 のみが ならば答えは です。 の 桁目が とします。
ここで、 の 桁目について考察します。 が連続したあと が( の 桁目が なら奇数個、そうでないなら偶数個)連続する形になります。ここで、前半の が連続する部分の下の桁は の値を一様に取れることが重要で、もし の連続する個数が奇数ならこの時点で答えがわかります(上の桁が である部分が何であろうと関係なくなるので)。また、 の連続する個数が偶数の場合も、 XOR が である場合以外は一様ですから、一様として答えを求めた後、 の長さを として、 についての問題の答えを用いて「補正」をしてあげればよいです。ここで、持つべき必要がある状態を考えると、「 の時の答え」のみであり、 が小さいほうから計算していくことができます。状態遷移が畳み込みの形になっていることに気を付けると、 でこの問題が解けます。
No.2084 Mex Subset For All Sequences / No.1856 Mex Sum 2 を統一的に解き、かつ計算量を落とす方法を紹介します。
No.2084 の方の設定を採用します。(No.1856 も与えられた に を足せば同じ状況になります)
以上 未満の整数からなる長さ の整数列 すべてについて、すべての非空部分列の の和を考え、その和を で割った余りを求めてください。
主客転倒と包除原理を用いて立式して、適当に変形します。
より、この問題を で解くことができました。 No.2084 のような状況ならば、線形篩を用いれば時間計算量 になります。
CODE FESTIVAL 2017 Elimination Tournament F-Unicyclic Graph Counting を時間計算量 で解く解法を紹介します。
長さ の正整数列 が与えられる。頂点 の次数が であるような 頂点 辺の単純連結グラフの個数を で求めよ。
まず、 となる頂点しか存在しない場合、解は です。以下、 を満たす頂点が存在するとします。
頂点の集合の中から、サイクルとして選択する頂点の集合を 、選択しない頂点の集合を とします。また、 とします。
ここで、 とします。(前提より、この仮定を満たさない について、解は です)
また、いったん 、 としておきます。
この時の解は(サイクルの作り方) (サイクルを つの頂点としてみた時の木の数) (サイクルから出る辺と頂点の対応付け) の形で書け、
と表せます。これを変形すると
となります。この式では や のケースが を返すので、さっきの つの仮定は取り除いて ok です。
ここで、 とします。
すべての について、 の部分集合 についての が求まれば、解は高速に求まります。
ここで、いったん和の部分を無視したとき、 についての答えは と書けます。
和の部分が入るときのみ ではなく をかけることを考えると、 についての答えは と書けます。
これを変形すると となります。 とすると、 についての答えは と書けます。
ここで、 ともに次数が小さいものからマージするテクニックで で求めることができます。
よって、この問題を で解くことができました。
ABC212-G Power Pair の素因数分解に 時間かかるとしたときの 解法を紹介します。
を満たす の組であって、ある正整数 が存在して を満たすものの個数 を求めよ。
まず、ある素数 について原始根 がかならず つは存在する(参考)ことと、 のうちどちらかが ならばもう一方も でなければ条件が成り立たないことから、問題は次のように言い換えられます。
を満たす の組であって、ある正整数 が存在して を満たすものの個数 を求めよ。
ここで、 を固定した時にありうる の個数は ですから、求めるものは です。
この値は に等しいです(ただし、 は を満たす の個数を表します)
ここで、 について考えてみます。 を満たす の個数は を満たす の個数と等しく、またこの値は ( はオイラーのφ関数を表します)と等しいです。
これより、求める値は です。
ここで、あとでわかりやすくするために と変形しておきます。
ところで、 は が ( ならば ) と表せるとき、次のように求められます。
の約数はすべての について を満たす数列 を用いて と表すことができ、またこの形で表現できるもののみが の約数です。
これらより、求めるものは として です。これを整理して です。
ここで、この問題は次のような問題に帰着します。
個の正整数列 が与えられます。各 について から一つの要素を選びそれらの積を取って "スコア" とします。すべての選び方について "スコア" を求め、それらの和を出力してください。
この問題の答えは と表せるため、 で求めることができます。
ここで、 の重複を認める素因数の個数( の和)は 、 の重複を認めない素因数の個数( の値)は なので、 で解くことができました。