HDU 6036 Division Game-Vjudge链接
有 k k 堆石头,每一堆有 n n 个石子,以 n=∏mi−1peii n = ∏ i − 1 m p i e i 给出(相当于就是把 n n 分解成质因数 pi p i 给你,还告诉你每个质因数的个数 ei e i ,每次从第 1 堆到第 k k 堆依次拿取石头(至少1个),要求拿完石头之后的数字为原本这堆石头个数的约数,当有任意一堆石头只有1个剩余时游戏结束
问:在第 i i 堆石头上结束游戏的方案数是多少?
每次拿石头都只能使剩下的石头的个数为原本石头的约数,相当于就是从当前这堆石头的非1质因数中抽掉任意多个
所以说 每一堆石头最多能够操作 ∑mi=1ei ∑ i = 1 m e i 次
把任意一堆的质因数全部抽掉则游戏结束
于是我们就相当于把题目变成了 每堆石头有 S=∑mi=1ei S = ∑ i = 1 m e i 个,每次最少抽掉1个石头,当任意一堆石头没了,游戏就结束了
然后我们就能大胆地开始设式子了
那么就有 ansi=∑k<=Sk=1gi−1(k+1)∗f(k)∗gn−i(k) a n s i = ∑ k = 1 k <= S g i − 1 ( k + 1 ) ∗ f ( k ) ∗ g n − i ( k )
解释一下
枚举在第 k k 轮把第 i i 堆取完,最多进行 S S 轮
前 i−1 i − 1 堆在 k k 轮之后仍然取不完 每一堆方案为 g(k+1) g ( k + 1 ) ,共 i−1 i − 1 堆,故为 gi−1(k+1) g i − 1 ( k + 1 )
第 i i 堆在第 k k 轮取完 故为 f(k) f ( k )
后 n−i n − i 堆被取了 k−1 k − 1 轮 每一堆方案为 g(k) g ( k ) ,共 n−i n − i 堆,故为 gn−i(k) g n − i ( k )
故以上为最后的结果
考虑上述 f(i) f ( i ) 与 g(i) g ( i ) 之间的转化关系
第 i i 轮取完的当前石子的方案为 在第 i−1 i − 1 轮取不完的同时,第 i i 轮直接全部取完
故 g(i) g ( i ) 中的每一种方案对应且仅对应一种在 i i 轮取完所有石子的方案
因此 f(i)=g(i)∗1=g(i) f ( i ) = g ( i ) ∗ 1 = g ( i )
化简后的式子为 ansi=∑k<=Sk=1fi−1(k+1)∗fn−i+1(k) a n s i = ∑ k = 1 k <= S f i − 1 ( k + 1 ) ∗ f n − i + 1 ( k )
此时由于两个方案之间必须有不同,所以我们就必须把相同的质因数当成相同的石子
也就是说 ei e i 代表的是有 ei e i 个石子是相同的
这个时候就会出现重复的情况
同时石子的顺序不同最后的结果也会不同
因此我们把每一堆石子分开讨论
对于每一堆石子 我们把 ei e i 个相同的石头分配到 k k 轮操作当中过去
值得注意的是 当前这一轮抽掉这一种石头可能为 0 个
因此我们需要添加 k−1 k − 1 个石头 此时隔板法才合法
否则当石头个数为 0 时,两个隔板重合,隔法不合法
就是这种情况
·|·||·
当中有两个隔板隔到一起,不合法,就要强行加一个石子进去
因此对于第 i i 种石头,它被分配的方案数为 Ck−1ei+k−1 C e i + k − 1 k − 1
对于全部 m m 种石头,分配方案就是 ∏mi=1Ck−1ei+k−1 ∏ i = 1 m C e i + k − 1 k − 1
但是对于这种分配,会出现真的某一轮没抽石子的情况
此时我们就要搞出一个很神奇的容斥(此处真的真的没理解到=_=)