Problem A
显然 \(k = 1, n\) 时才有解。
Problem B
倒序扫一遍即可。
Problem C1(2)
C1 直接相邻为 \(1\) 的能用,否则不算。
C2 就是把间隔挖出来,奇偶分别选择。
Problem D
直接记录每个状态的 \(k\) 优解,然后堆转移。
Problem E
假设两种牛之间的间隔大小分别为 \(g_i\)。
首先一个观察是只有所有 \(g_i\) 都是偶数时,FN 才会胜利,那么我们用总方案 \(C_{l}^{2n}\) 减去 FN 获胜的方案就是 FJ 获胜的方案。
那么我们枚举 \(s = \sum g_i\),可得若干个偶数组合一下就是 \(C_{\frac{s}{2} + n - 1}^{n - 1}\),用插板法可得。然后再加上放奶牛的方案 \(C_{l - s - n}^{n}\)。
最后答案记得乘二,因为 \(ABABAB...\) 和 \(BABABA...\) 是等价的。
Problem F
首先一个观察是,这个东西反复嵌套,改变最前面的数字一定不会影响答案太多,实际上 \(n \ge 6\) 时,改变 \(a_1\) 对 \(a_n\) 的变化至多为 \(1\)。
那么就可以直接分块。
我们预处理出每个块内算下来的值会是多少,假设块为 \([l,r]\) 我们可以看作 \(l\) 之前的都是 \(0\)。即使不是,也至多改变答案 \(1\)。
那么我们这样算出一个块的值,记为 \(v\)。 那么前面的数字要是多少才能到达 \(v + 1\) 呢? 我们从 \(v\) 开始倒推一边即可,这个阈值设为 \(b\)。
查询的时候暴力重构那个点所在的块,然后遍历块,如果当前值大于 \(b_i\) 那么就赋值为 \(v + 1\),否则是 \(v\)。
当然我们每一步根号都直接下取整对答案没有影响,可以通过反证法证明。
Problem G
待写。
Problem H
待补。
标签:...,那么,CodeTON,Round,答案,Div,Problem From: https://www.cnblogs.com/z-t-rui/p/18107047/CF1942