CodeTON Round 8 (Div. 1 + Div. 2, Rated, Prizes!)
https://codeforces.com/contest/1942
E. Farm Game(2s,256mb)
在 区间[1,l]
整数点上 放 ABABAB…或者BABABA… 一共n组AB或BA, 坐标不一定相邻
- 玩家X可以选择任意多个X(和玩家ID相同),和一个方向(左或右),把所有选中的A沿着这个方向移动
- A先B后
- 移动过程中字母不能重叠 不能出
[1,l]
范围,如果无法移动则输掉
问 给定$l,n$ 有多少个初始状态 玩家A获胜
我的思路
很像nim的游戏之类的
那么考虑 每个AB之间的空位的和,如果空位和为奇数,那么总可以移动那个位置让AB之间的空位和减1,而对于空位和是偶数,不一定能增大,也不一定能减少,但只要是能操作则结果也是奇数,
如果一轮操作后 空位和不变(否则变小),那么对应位置整体向同一个方向移动了两个字母
所以 获胜状态 = 所有AB间隔 空隙和=奇数
那么 l个位置 去掉 2n个占用位置,实际是切割成2n+1个 >=0 的段
也就是 l-2n长度线段切割成 2n+1个 >=0整数段 且 偶数index的段的长度和=奇数
考虑所有段+1
(l-2n)+(2n+1) 段 切割成 2n+1个 >=1 整数段,且偶数index的段的长度和 = 奇数+n
考虑 做顺序的置换,把所有偶数index段直接移动到最前,则方案还是一一对应
(l-2n)+(2n+1) 段 切割成 2n+1个 >=1 整数段,且前n段的长度和 = 奇数+n
1 | for 前n段的长度和 = i: |
最后答案 AB和BA反向需要乘上2
然而 pretest1都没过 https://codeforces.com/contest/1942/submission/256178349
然后我发现读错题了,是 一次可以移动任意多个同方向,而不是一次一个
那么思路也完全一样,就是 去挤压另一个
所以 如果 存在 > 0 个奇数空位,则A 总能 把这些 奇数空位全变偶数(0个奇数空位)
如果 存在 0 个奇数空位,则全为偶数空位,则操作不确定,且操作后至少一个奇数空位
所以 方案 = 所有方案 - 全偶数空位方案
一样的
l-2n个位置切割2n+1个>=0整段,其中偶数index的长度全偶数
(l-2n)+(2n+1)=l+1个位置切割2n+1个>=1整段,其中偶数index的长度全奇数
l+1个位置切割2n+1个>=1整段,其中前n段的长度全奇数
1 | for 前n段长度和为i, i % 2 = n * 1 % 2: |
ans = (binom(l,2n)-cnt)*2