[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,用线性基即可

生成函数

注意: