zoukankan      html  css  js  c++  java
  • CF补题3

    639 Div. 1

    题意 给定序列$a$, 求一个序列$b$, 满足$b_ile 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 ext{^=} a_i$, $YB$相当于$a_i ext{^=} 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-sumlimits_{i=1,i ot = 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,1le i<jle n$, 那么$a$合法. 求所有合法序列中每个数的出现次数和

    首先可以发现合法序列可以与排列构建映射

    一个排列可以分成$k$个降序的区间, 对于第$i$段的元素$x$, 构造$a_x=i$即可

    考虑数$k$的出现次数, 设长$n$的序列, 分成$k$个降序区间的方案是$f_{n,k}$

    那么可以得到$k$在位置$i$中出现次数为$inom{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

    假设最终高度为$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$, 分界点是$lfloorfrac{sum}{n} floor$和$lceilfrac{sum}{n} ceil$

    F

    假设$X=X_1cdot 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_icdot j$

    所以$O(nk)DP$即可求出最优方案

    G

    第一步先考虑第一个盒子, 随机取出另一个盒子$x$和第一个比较, $x$有礼物的概率$le frac{1}{2}$

    那么假设随机$30$次, 都是第一个盒子重的话, 那么就有$1-frac{1}{2^30}$的概率认为第一个盒子是石头

    第二步找到最小的$kle 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 lfloorfrac{n}{2} floor$的方案

    那么每个区间起始位置一定在$[1,lceilfrac{n}{2} ceil]$内, 一定以$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$就减, 减完一定非负, 否则就加

    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$个$modspace k$不为$0$的位置, 这样最多被删去$k-1$个点, 最大值就为$n-lfloorfrac{n-1}{k} floor-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+2le 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

  • 相关阅读:
    一种C#读写二进制文件的通用方法
    关于POP3协议的一点资料
    关于看图工具的几点想法
    在WPF程序中将控件所呈现的内容保存成图像
    Nuget挂了的解决方法
    VisualStudio 2012中的单元测试
    在Andorid平板上体验Windows8的猜想
    创建自己的awaitable类型
    【转载】:最佳注释
    百度云盘试用
  • 原文地址:https://www.cnblogs.com/fs-es/p/13121586.html
Copyright © 2011-2022 走看看