SRM442题解

rng_58出的神数学题……爆零给跪……不过发现TC在做练习赛的时候自己可以无限制地cha自己……


250pts:

题意:有一堆N个石子,双方轮流取,每次只能取4^k个(k为非负整数),无法操作者败。求是否先手必胜。

分析:这题有神结论……先说一种错误做法:把N化为四进制,对四进制数的每位求和,如果和为奇数这先手必胜。

这个做法是错的,因为一次取不一定要取高位。举个例子,N=8,化为四进制为20。但此时是先手必胜的,因为先手可以取1个,之后无论后手怎么操作都必败。

这题的神结论就是:先手必败的充要条件是,N除以5余0或2。证明如下:

1、证明任意必胜态都能在一步之内到达一个必败态。必胜态为N%5=1,3,4,而4^k%5=1或4,所以N-4^k%5=0,2。

2、证明任意必败态都无法在一步之内到达另一个必败态。假设存在必败态x和y(x,y%5=0,2)且存在非负整数k'使得x-4^k'%5=y%5。可以发现等式是无法成立的。


600pts:

题意:N张牌,正反都有数字。所有正面和所有反面的数字各构成一个排列。将牌排成一排,每张牌可以正面朝上或者反面朝上,这样可以构成一个序列。给定N张牌正面和反面的数字,求:所有可能的序列方案数。N50

比如: 3 张牌,正面分别为 1 2 3 ,反面分别为 1 3 2 一共有 12 种序列:
123 132 213 231 312 321 133 313 331 122 212 221

分析:

假设N足够小,可以让我们枚举哪些牌正面朝上。那么会发现,可能会有一些数字重复出现,而且重复出现次数最多为2。记重复出现的数字个数为K,那么这些牌的不同排列数为:N!/2^K,即多重集的排列数。

现在我们要求的就是,对于任意合法的K,在多少种牌的正反方案中有K个数出现了2次。

我们把所有牌按正面数值1N的顺序摆成一排。这样我们就可以把反面数值视为一个置换,把这张牌反面就相当于置换这一个位置。可以发现,置换的不同循环之间是不影响的。

现在我们就来考虑一个循环。记这个循环的长度为L,假设出现两次的数的个数为K。显然有K≤L/2。

……然后呢?似乎不太好求啊。尝试转换思路,比如……
建立图论模型。
将循环的每个元素视为一个节点,每个元素连向元素的值对应的元素的节点。
有了这个图可以干什么呢?
一张牌可以视为其中的一条边,牌是否反面朝上相当于边是否反向。牌的数字也即边指向的节点对应元素的值。
那么出现两次的数也即入度为2的节点对应元素。而且还可以发现,入度为2的节点和入度为0的节点个数相等,并且交替出现。
那么我们就可以得出一个计算长度为L的循环中有K个数出现两次的方案数的公式:2*C(L,2K)。K=0时方案数为1。
注意刚才只考虑了牌的正反,还没有考虑排列。剩下的部分就不难了。可以用背包求出对于整个序列出现两次的数为K个的方案数,再用多重集的排列公式计算求和。也可以处理出每个循环内部出现两次的数为任意个的方案数,然后把一个循环视为同一种元素,还是一个多重集排列的问题。

900pts:
还不会……官网题解写的是DP+结论……

你可能感兴趣的:(topcoder)