CF补题3
639 Div. 1
D
题意 给定序列$a$, 求一个序列$b$, 满足$b_i\le a_i, \sum b_i=k$, 并且$\sum b_i(a_i-b_i^2)$最大
假设$b_i=x$, 那么增加$b_i$后$f$增加$-1+a-3x-3x^2$, 每次贪心每次取增量最大的一定最优
所以可以二分出最小增量$A$, 满足所有$\ge A$的增量已经添加完毕, 并且$b$值和不超过$k$
最后再把所有增量为$A-1$的位置增加即可
E
F
把$R$看做$1$,$Y$看做$2$,$B$看做$3$,$W$看做$0$. 那么$mix$操作等价于求异或和
再把两位拆开, $a_i$表示低位, $b_i$表示高位
那么$RY$相当于交换$a_i$和$b_i$, $RB$相当于$b_i\text{^=} a_i$, $YB$相当于$a_i \text{^=} b_i$
相当于要解一个$2k$个$2n$变量的异或方程组, bitset优化高斯消元即可
641 Div. 1
D
题意 $n$个人, 第$i$个人$a_i$个饼干, 每次操作随机选一块饼干分给另一个人, 求一个人拥有所有饼干期望操作数
设$E_x$为最终分给$x$的期望, $E'_x$为全分给其余人后不停止,最终分给$x$的期望
$x$获得所有饼干期望和概率只与$x$初始饼干数有关, 那么从$i$转移到$x$期望就为$E'_0$
就有$E_x=E'_x-\sum\limits_{i=1,i\not = x}^n(E'_0P_i+E_i)$, 所以$ans=\sum E_x = \frac{\sum E'_x-(n-1)E'_0}{n}$
设$f(a_x)=E'_x, m=\sum a$, 就有
$f(x)=\frac{x}{m}f(x-1)+\frac{m-x}{m}(\frac{n-2}{n-1}f(x)+\frac{1}{n-1}f(x+1))+1, x<m$
可以把每个$f(x)$都表示成$A f(0)+B$的形式, 最后代入$f(m)=0$即可
E
F
题意 一个长$n$的序列$a$, 若对于$a$中每个大于$1$的$k$, 都存在$a_i=k-1,a_j=k,1\le i<j\le n$, 那么$a$合法. 求所有合法序列中每个数的出现次数和
首先可以发现合法序列可以与排列构建映射
一个排列可以分成$k$个降序的区间, 对于第$i$段的元素$x$, 构造$a_x=i$即可
考虑数$k$的出现次数, 设长$n$的序列, 分成$k$个降序区间的方案是$f_{n,k}$
那么可以得到$k$在位置$i$中出现次数为$\binom{n}{i}f_{i,k-1}(n-i)!$
$f_{n,k}$也就是欧拉数, 有公式$f_{n,k}=(k+1)f_{n-1,k}+(n-k)f_{n-1,k-1}$
总复杂度就为$O(n^2)$
643 Div. 2
E
假设最终高度为$H$, 小于$H$要添加的和为$X$, 大于$H$要删除的和为$Y$
若$X>Y$, 答案为$Ymin(m,a+r)+(X-Y)a$
若$Y>X$, 答案为$Xmin(m,a+r)+(Y-X)r$
答案关于$H$是两段下凸曲线, 最优$H$要么是每段曲线最低点, 要么是两段曲线分界点
最低点一定是某个$h_i$, 分界点是$\lfloor\frac{sum}{n}\rfloor$和$\lceil\frac{sum}{n}\rceil$
F
假设$X=X_1\cdot X_2$, 那么$d(X_1)\le d(X) \le d(X_1)d(X_2)$
所以只要保证$X_2$素因子不超过$2$, 那么$2d(X_1)$与答案的相对误差就在$0.5$之间.
考虑求$d(X_1)$, 可以每次取相邻几个素数乘积询问就可以得到$X_1$中素因子, 然后每两个素因子分一组询问出素因子的幂次即可.
Edu 87
F
最优方案一定是先选出$k-1$个, 按$b$从小到大添加, 然后其余依次添加删除, 最后留一个$a$最大的
先初始化每个人$b$值贡献为$(k-1)b_i$, 那么倒数第$j$个添加的人贡献就为$a_i-b_i\cdot j$
所以$O(nk)DP$即可求出最优方案
G
第一步先考虑第一个盒子, 随机取出另一个盒子$x$和第一个比较, $x$有礼物的概率$\le \frac{1}{2}$
那么假设随机$30$次, 都是第一个盒子重的话, 那么就有$1-\frac{1}{2^30}$的概率认为第一个盒子是石头
第二步找到最小的$k\le 0$, 满足$[1,2^k]$比$[2^k+1,2^{k+1}]$重, 那么这样$[1,2^k]$中全为石头, $[2^k+1,2^{k+1}]$一定有礼物
第三步在$[2^k+1,2^{k+1}]$中二分一个前缀与$[1,2^k]$比较, 即可找出标号最小的礼物
645 Div. 2
E
假设存在方案, 那么一定可以找到一个$\ge \lfloor\frac{n}{2}\rfloor$的方案
那么每个区间起始位置一定在$[1,\lceil\frac{n}{2}\rceil]$内, 一定以$x$结束
枚举起始位置, 算出向后延伸最大长度即可
F
Edu 88
F
646 Div. 2
F
题意 给定长$n$的串$S,T$, 每次操作循环右移$S$中一个子串, 求$S$变为$T$的最少操作次数
循环右移可以等价于选一个字符删除, 然后把它插入到前面某个位置
设$f_{i,j}$为$S[1,i]$加上$S[i+1,n]$中删除的字符后与$T[1,j]$匹配的最小操作次数
如果$S_{i+1}=T_{j+1}$, $f_{i+1,j+1}\leftarrow f_{i,j}$
如果$j<n$并且$S[i+1,n]$中删除$T_{j+1}$后每种字符个数都不少于$T[j+2,n]$, $f_{i,j+1}\leftarrow f_{i,j}+1$
如果$i<j$, $f_{i+1,j}\leftarrow f_{i,j}$
最终答案就为$f_{n,n}$
647 Div. 1
B 降序排序, 如果当前差$>0$就减, 减完一定非负, 否则就加
C
D
E
F
648 Div. 2
F
G
Edu 89
F
最长路径一定是先走不超过$n-1$段, 然后反复重复一条边, 可以用bellman-ford求出不重复时的最长路
重复时考虑每条边的贡献, 关于边权是条直线, 可以暴力$O(m^2)$求出每条直线最大时的对应区间, 然后等差数列求和
G
设$f_{i,j}$表示$s$中前$i$位, 匹配到$t$中第$j$位的最小删除数
直接删除$dp_{i+1,j}\leftarrow dp_{i,j}+1$
$s_{i+1}$为'.', $dp_{i+1,j-1}\leftarrow dp_{i,j}$
$s_{i+1}$与$t_{j+1}$相等, $dp_{i+1,j+1}\leftarrow dp_{i,j}$
若不相等就把$s$往后匹配一段能消掉的最短串
649 Div. 2
E
只要先找到$0$, 然后询问$n-1$次即可得出答案
考虑$3$个数$a,b,c$
若$a|b < a|c$, 那么$b$一定不为$0$
若$a|b > a|c$, 那么$c$一定不为$0$
若$a|b = a|c$, 那么再通过$b|c$判断即可
所以就通过$n+x$次操作得到两个可能为$0$的数, $x$是第三种情况的次数
可以发现$x$很小, 大概不超过$20$
然后考虑如何检验剩余的两个数哪个是$0$
对于数$a$, 可以随机选$30$个数, 若它们与$a$询问的与和为$0$, 那么就有$1-\frac{1}{2^30}$的概率可以认为$a$为$0$
这样总询问数不超过$2n+50$, 可以通过
GR 8
E 考虑拓扑排序, 让$c_y=max(c_y,(c_x+1)mod \space 3)$, 最后删掉所有$c_x$为$2$的$x$
F 每次选$k$个$mod\space k$不为$0$的位置, 这样最多被删去$k-1$个点, 最大值就为$n-\lfloor\frac{n-1}{k}\rfloor-k$, 可以暴力枚举出最优的$k$
G
H
651 Div. 2
F
首先要注意到假设询问点包含$(s,f)$路径上的点, 那么最小值就为$dist(s,f)$, 否则一定大于$dist(s,f)$
那么可以先询问所有点, 这样可以得到$dist(s,f)$
然后任取一个点为根, 二分求出最小深度$h$, 满足询问深度$[h,n]$的所有点得到的最小值为$dist(s,f)$
这样最小深度$h$对应的点也就为点$s$
对于点$f$, 可以询问所有到$s$距离为$dist(s,t)$的点, 得到的对应点即为$f$
总询问数就为$\log n+2\le 12$, 可以通过$F1$
对于$F2$, 只要找到一个点$x$, 满足以$x$为根最大深度不超过$\frac{n}{2}$, 然后二分, 这样询问数最大就为$11$
652 Div. 2
E
对于食物数不少于度数的点, 显然应该放在尽量靠后. 转化为求反图最大拓扑序
F
654 Div. 2
F
每次询问等价于求区间内最长连续先减后增序列的长度, 可以用线段树暴力维护
GR 9
E
每次选出两个数$x,y(x<y)$, 满足$a_x>a_y$且$[a_y,a_x]$之间没有其他的数
这样的话交换$x,y$以后只会消除逆序对$(x,y)$, 不会改变其他所有逆序对
因为有重复数的存在, 这样可能导致排好序后还有逆序对没有使用
所以可以在每次交换后, 暴力$O(n)$检验一下所有$(i,x),(x,i),(i,y),(y,i)$, 如果权值相同并且是未使用的逆序对的话就交换
这样总复杂度是$O(n^3)$, 可以通过
F
G
H
I