标签:直接 结果 就是 src 次数 允许 难点 偶数 一个起点
显而易见这道题是有一个博弈的背景的,那么根据博弈的那两个经典结论,只要能转移到一个必败态的就是必胜态,如果一个必败态都转移不到的就是比败态。
那么我们首先将0与1初始化为必败态,对于每一个数i,减去所有比i小的所有质数,如果有必败态即为必胜态,如果都转移不到就是必败态了。
接着再留心一下题目,题目要求至多x步,那么就是取得胜利的最多次数了。这样的话因为已经求出了哪个点是必胜态与必败态,我们也便可以推出转移方程:
如果这个状态i是必胜态,那么能转移到它的一定是比它小的j的必败态,因为知道自己会胜利,那么一定会选择其中的最小步数。
如果这个状态i是必败态,那么能转移到它的就是比它小的任意一个数了,因为知道自己会失败,那么一定会选择其中的最大步数。
这道题目最恶心的就是卡常数了。于此我使用了o(n)的素数筛来筛出质数,并同时处理出比i小的最大素数是第几个素数,这样能够尽量减少后期的枚举量,以便不被卡常
ans就是C(n,[n/2])
首先,把那个三角形当做一个图来看,每一个点的数字表示的含义就是从顶点走到该点的路径的数目。
路径数目可以转换为序列数目,从定点0开始 向左为-1 向右为+1
所以路径的数目也就等价于由-1和+1组成的,长度为n-1的,任意前k项和都大于等于-1的个数。
解释:
接下来进行分析一个无效序列的特点:
假设这个序列含有m个-1(有C(n-1,m)种摆放方法)
如果这n-1个数组成的序列是无效的,说明有一个最小的k使得前k项和为-2,也就是有 [k/2]-1 个1 和 [k/2]+1个-1
如果我们把这k个数反向 也就是1变为-1 -1变为1 则得到了一个含有m-2个-1的序列
这种变换是一对一的(因为反向的特性) 所以换一种说法就是
在一个含有m个-1的序列的集合里,失效的序列的个数正好等于 由m-2个-1的序列组成的集合的大小
数学语言就是
C(n-1,m) - C(n-1,m-2)
而遍历m从0到[(n-1)/2]+1 = [n/2],求和。可以得到
Ans = C(n-1,0) + C(n-1,1) + [C(n-1,2)-C(n-1,0)]+[C(n-1,3)-C(n-1,1)] + [C(n-1,4)-C(n-1,2)] + ....+[C(n-1,[n/2])-C(n-1,[n/2]-2)]
化简得到
Ans = C(n-1,[n/2]-1) + C(n-1,[n/2])= C(n,[n/2])
标签:直接 结果 就是 src 次数 允许 难点 偶数 一个起点
原文地址:https://www.cnblogs.com/kkzt/p/11369885.html