别人是口胡型选手和比赛型选手,我是口嗨型选手。
CF2038G. Guess One Character
发现长度为 \(2\) 的子串 \(00/01/10/11\) 总个数为 \(n-1\) 个,只有以最后一个数为开头的没被统计到。
所以我们可以用一次询问求出 \(0\) 的个数,再用两次询问求出 \(00/01\) 的个数,判断一下相加的和是否等于 \(0\) 的个数就好。
CF2038F. Alternative Platforms
\(\max(\min\{v\},\min\{r\})\) 太难看了!!!
运用经典 trick: \(\max(a,b)=a+b-\min(a,b)\),可得:
我们设 \(a_i=\min(v_i,r_i)\),式子变成 \(\min\{v\}+\min\{r\}-\min\{a\}\),这是三个相同的子问题。
现在问题转化为对一个序列求出所有大小为 \(k\) 的子集的最小值之和,设其为 \(f(k)\)。
首先答案与序列的顺序无关,所以先把序列从小到大排序。然后钦定 \(a_i\) 为集合最小值,我们要从其后面 \(n_i\) 个数中
选 \(k-1\) 个,那么其贡献为 \(a_i\times\binom{n-i}{k-1}\),即 \(f(k)=\sum\limits_{i=1}^{n-k+1}a_i\binom{n-i}{k-1}\)。
现在我们对 \(1\sim n\) 中的每个 \(k\) 都求一遍答案,时间复杂度为 \(O(n^2)\),不能接受。
简单化一下式子,把组合数拆开:
发现这个东西是卷积的形式,我们定义数组 \(F\) 满足 \(F_i=a_i(n-i)!\),\(G\) 满足 \(G_i=\frac{1}{i!}\),将两个数组卷积之后基本就能得到我们需要的答案了,我们现在求的是所有方案的总和,最后除以一个方案数即可。
CF1406D
由于 \(b_i+c_i=a_i\),所以 \(b_i=a_i-c_i\),\(b\) 单调不降,所以 \(a_i-c_i\ge a_{i-1}-c_{i-1}\),解的 \(c_i-c_{i-1}\le a_i-a_{i-1}\),为使 \(\max(c_1,a_n-c_n)\) 最小,我们要让 \(c_n\) 尽可能的大,所以 \(c_i=c_{i-1}+\min(0,a_i-a_{i-1})\),所以我们只需要关心 \(a\) 的差分数组就好了,对于后面的修改发现差分数组只有两个位置变化,随之更新一下答案即可。
CF1401E
容易发现答案是 交点个数加上端点为 \((0,10^6)\) 的线段数再加一,扫描线求一下即可。
arc187_a
不知道是不是正解,感觉挺糖的。
首先目标是差分数组全都 \(\ge0\),设差分数组为 \(a\)。
考虑对 \(A_i\) 连续操作两次会变成 \(A_{i-1},A_i+k,A_{i+1}+k,A_{i+2}\),这时差分数组变为 \(a_{i-1},a_i+k,a_{i+1},a_{i+2}-k\),发现等价于我们可以选择一个位置 \(i(i\le n-1)\) 使 \(a_i=a_i+k\),同时 \(a_{i+2}=a_{i+2}-k\)。通过这个操作 \(a_{1\dots n-1}\) 肯定都能 \(\ge0\)。
如果操作完 \(a_n\ge0\) 就已经结束了。
否则再考虑对一个数 \(A_i\) 进行一次操作会使差分数组变为 \(a_{i-1},a_i+a_{i+1}+k,-a_{i+1}-k,a_{i+2}+a_{i+1}\) ,此时选择 \(i=n-1\) 进行操作,\(a_n\) 随之变为 \(-a_n-k\),我们只需要对着 \(a_{n-2}\) 一直进行一开始说的 连续操作两次 的操作,一定能使得 \(-a_n\ge k\),但是如果 \(n<3\) 就没法完成上述操作了。
arc187_d
似乎又是我没见过的一个很典的 \(\text{Trick}\)。
最大/小化极差的套路是枚举其中一个并最大/小另一个。那么设 \(f_i\) 表示最小值为 \(i\) 时的最小最大值,显然 \(f\) 是单调不降的,且答案是 \(\min\{f_i - i\}\)。注意如果 \(i\) 并不存在于序列中也没关系,此时 \(f_i - i\) 一定不是最优解因为调大 \(i\) 一定不劣。
考虑加入一个数对 \((a,b)\),令 \(a \le b\)。那么应该有下面的变化:
用线段树维护一下就好了。
标签:le,11.18,min,max,个数,差分,数组 From: https://www.cnblogs.com/ZepX-D/p/18553903