[BZOJ3771]Triple

不同情况的生成函数

我们先设a(x)为丢失一把斧头的生成函数,b(x)为丢失两把一样的斧头的生成函数,c(x)为丢失三把一样的斧头的生成函数

对于样例来说:

a(x)=x4+x5+x6+x7b(x)=x8+x10+x12+x14c(x)=x12+x15+x18+x21

再设A(x)为丢失一把斧头的生成函数,B(x)为丢失两把不同的斧头的生成函数,C(x)为丢失三把不同的斧头的生成函数

对于样例来说:

A(x)=a(x)B(x)=a2(x)b(x)C(x)=a3(x)3a(x)b(x)+2c(x)

解释一下C(x),首先随意的选择三个斧头(可以相同),然后减去选出两把相同的斧头和另一把斧头(也可以相同),但是三个相同的被减了三次,所以要加2

由于数据范围较大,需要用 FFT 或 NTT 优化

solution-code2593

每种水的生成函数

第 1 种:1+x+x2+=11x

第 2 种:1+x=1x21x

第 3 种:1+x+x2+x3+x4=1x51x

第 4 种:1+x5+x10+=11x5

第 5 种:1+x2+x4+=11x2

乘在一起得到:1(1x)3=(1x)3

带入广义二项式定理得:f(x)=i=0Ci+2ixi

i=n时第n项为xCn+2nxn=Cn+22xn

所以答案就为ans=(n+1)(n+2)2

solution-code4763

每种食物的生成函数

汉堡:1+x2+x4+=11x2

可乐:1+x=1x21x

鸡腿:1+x+x2=1x31x

蜜桃多:x+x3+x5+=x1x2

鸡块:1+x4+x8+=11x4

包子:1+x+x2+x3=1x41x

土豆片炒肉:1+x=1x21x

面包:1+x3+x6+=11x3

乘在一起得到:f(x)=x(1x)4=x(1x)4

带入广义二项式定理得f(x)=xi=0Ci+3ixi

i=n1时第n1项为xCn+2nxn=Cn+23xn

所以答案就为ans=n(n+1)(n+2)6

[BZOJ3759] Hungergame

转载自joyouth

首先我们不难看出如果存在一个异或和为0的子集,那么先手必胜,否则先手必败

证明如下:

  1. 首先如果至少存在一个异或和为0的子集,那么一定存在一个异或和为0的子集使得选取之后剩下的数的任意子集异或和不为0
  2. 假设我们已经选取了一个异或和为0的子集,无论后手怎么做,我们总是有办法使得当前选取的子集异或和为0,因为后手无论是拿石子还是取石子之后,当前子集异或和不等于0,根据 Nim 游戏可知,此时先手一定有方案使得异或和为0

至此,我们证明了如果至少存在一个异或和为0的子集,先手必胜

那么题目就转化为求是否存在一个子集异或和为0,用线性基即可

生成函数

注意: