A

先构造最左方案,然后能调整尽量调整即可。
时间复杂度 \(O(m)\).
代码: 75367082

B

显然每个二进制位是独立的,且只能有 \(0\) 个或 \(1\) 个数在该位上有值。乘起来即可。
时间复杂度 \(O(\log n)\).
代码: 75373134

C

贪心。每次删去能删的尽量大的(不亏)。
比较好的实现方法是定义一个 solve(u) 函数,先不停地删 \(u\) 点直到删不下去为止,然后再递归 solve(u<<1),solve(u<<1|1). 没有必要比较大小,因为每个子树内删的个数是固定的。
时间复杂度 \(O(2^hh)\).
代码: 78094188

D

对于每一对相邻相等的元素,我们在中间画一条线,并定义线的值等于相等元素的值。于是就得到了一个新的序列,操作等价于:在新的序列上选择相邻两个元素,如果不等则一起删去,相等则留下一个。也就相当于尽量多删不等的。
不难发现最优策略:当不存在一个元素出现次数严格超过一半时一定可以一直删不同直到只剩下一个元素,否则可以让每个其他元素都和这个元素配对。策略就是如果还剩下两种或更多则取出现次数最多的和它任意一个相邻的删,否则就删相同的。
难点是如何实现:要对每个字符维护一个集合,集合中的每个元素是一个二元组,表示一对相邻不同的位置,且其中一个是该字符。使用 set 即可。
最后还要求输出方案,要找到在当前序列中的位置,树状数组+并查集维护哪些点还没被选即可。
时间复杂度 \(O(n|\Sigma|+n\log n)\).
代码: 78207027

E

首先稍微转化一下:有 \(m\) 个数 \(a_i\),找出一个序列 \(b_i\) 满足 \(\sum^m_{i=1}b_i=K\) (\(m,K\) 实际为输入的 \(m+1,K+m+1\)),对每个 \(i\) 找出 \(b_i\) 个正整数和为 \(a_i\),最小化所有找出的数的极差。
不难发现对于一个 \(i\) 最优策略一定是分配得尽量平均,即 \(b_i-a_i\mod b_i\) 个 \(\lfloor\frac{a_i}{b_i}\rfloor\) 和 \(a_i\mod b_i\) 个 \(\lceil\frac{a_i}{b_i}\rceil\). 于是就是要最小化 \(\max^m_{i=1}\lceil\frac{a_i}{b_i}\rceil-\min^m_{i=1}\lfloor\frac{a_i}{b_i}\rfloor\).
考虑求出两个值:\(R\) 表示 \(\max\) 部分的最小可能值是多少,\(L\) 表示 \(\min\) 部分的最大可能值是多少。这个容易直接二分得到。
可以发现如果对于每个 \(i\) 都存在 \(b_i\) 满足 \(L\le\lfloor\frac{a_i}{b_i}\rfloor\le\lceil\frac{a_i}{b_i}\rceil\le R\) 则一定可以在 \(L\) 和 \(R\) 的方案基础上进行调整得到总个数恰好为 \(K\) 的方案。即这种情况下答案为 \(R-L\).
但是有可能存在一些 \(i\) 不存在合法的 \(b_i\). 这时候我们求出最接近 \([L,R]\) 的 \(b_i\),即满足 \(\lfloor\frac{a_i}{x}\rfloor\lt L\) 的最小的 \(x\) 和满足 \(\lceil\frac{a_i}{y}\rceil\gt R\) 的最小的 \(y\). 我们令 \(a_i\) 的贡献(就是参与到 \(\max\) 和 \(\min\) 的计算中的值)为 \(x\) 和 \(y\) 中的一者(显然它不可能同时成为 \(\max\) 和 \(\min\),因为它不可能既 \(\gt R\) 又 \(\lt L\)),那么和上面同理可证一定能调整得到一个合法方案。
于是我们的问题就转化为,有一个集合,初始时只有 \(L,R\) 两个数,现在有 \(n\) 个二元组,要从每个中挑出一个加入集合,最小化集合内的极差。直接先默认全选小的,然后从小到大每次把最小的改成选大的即可。
时间复杂度 \(O(m\log m+m\log n)\).
代码: 78272837

Codeforces 1329 题解相关推荐

  1. Dominated Subarray[codeforces 1257C]题解

    Dominated Subarray[codeforces 1257C] CF-1257C(Dominated Subarray) 题目 输入 输出 题目大意 样例输入 样例输出 CF-1257C(D ...

  2. Codeforces 833B 题解(DP+线段树)

    题面 传送门:http://codeforces.com/problemset/problem/833/B B. The Bakery time limit per test2.5 seconds m ...

  3. Codeforces 1344 题解

    A 假设所有的 \((i+a_i)\) 模 \(n\) 意义下构成排列则答案为 YES,否则为 NO. 时间复杂度 \(O(n)\) 或 \(O(n\log n)\). 代码: 79150268 B ...

  4. Codeforces 1314 题解

    这场整体质量感觉可以算 2020 年度(目前为止)最垃圾. A 按数值从小到大扫描,维护一个优先队列,每遇到一个数加入队列,每次数值发生 \(+1\) 时弹掉队列中价值最大元素,然后把此时队列中所有元 ...

  5. Codeforces 1338 题解

    A 对于每个 \(i\) 我们求出 \(b_i\) 表示 \(i\) 这个数最少要增加多少(\(\max^i_{j=1}a_j-a_i\)),答案等于最小的 \(k\) 使得 \(2^k-1\ge \ ...

  6. Codeforces 1149 题解

    A 特判全是 \(2\),对于有 \(1\) 的情况把 \(1\) 放到第二个和最后. 时间复杂度 \(O(n)\). 代码: 76492031 B 考虑只有一次询问的情况,有一个 \(O(n^3)\ ...

  7. Codeforces 1025 题解

    A 若 \(n=1\) 则答案为 YES,否则答案为 YES 当且仅当存在两个相同的字符. 时间复杂度 \(O(n)\). 代码: 76484733 B 求出所有 \(\text{lcm}(a_i,b ...

  8. Codeforces 1188 题解

    A 首先对于 A1 题,可以加减任意实数,结论是答案为 YES 当且仅当没有度数为 \(2\) 的点.必要性显然,充分性通过下面的构造来证明. A2 题的构造:考虑随便找一个叶子节点为根,记为 \(r ...

  9. codeforces #1 题解

    codeforces1A 题目链接:http://codeforces.com/problemset/problem/1/A 题意:给定一个n*m的矩形,然后给一个a*a的地板,求最少需要多少地板可以 ...

最新文章

  1. 微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
  2. 哪种云存储服务最适合你?
  3. 使用GitHub免费搭建属于自己的网站
  4. iphone屏蔽系统更新_苹果iphone手机屏蔽烦人的系统更新弹窗提醒!
  5. 阿里云ACE共创空间——大数据方案体验1 日志服务
  6. cf570 D. Tree Requests
  7. mapgis转arcgis数据后发现属性表内没有数据
  8. 三维点云学习(1)上-PCA主成分分析 法向量估计
  9. MTK平台调试加密芯片ATSHA204A
  10. 概率论总结(《概率论与数理统计》第四版 浙江大学)
  11. 阿里巴巴早期发展简史
  12. 基于Java EE的网上书店系统
  13. jdk8Comparator.comparing 排序
  14. GPS定位轨迹抽稀之道格拉斯-普克(Douglas-Peuker)算法详解
  15. 把自己曾经写的一个客户间聊天的程序与大家分享(2)
  16. 关于pr文件导入的问题
  17. 什么是数据中台系统 - whale帷幄
  18. k8s-滚动更新与健康检查
  19. 信杂比公式_关于信噪比SNR【转载】
  20. 为什么前端人找工作越来越难?!

热门文章

  1. 推荐常用算法之-基于内容的推荐(转自-BreezeDeus博主)
  2. Delphi开发步骤经验谈(C++亦实用)
  3. 高级C语言教程编码风格
  4. SpringMVC和SpringBoot的拦截器 HandlerInterceptor 入门
  5. Python数据收集及分析学习相关
  6. 【 ➰斗艳争妍の网络协议姐妹花‍‍️➰】http协议 VS websocket协议
  7. 【动态规划】分组背包
  8. linux文件的特殊权限,Linux系统文件的默认权限和特殊权限
  9. Bit-Z CEO长顺入围2018中国经济潮流人物
  10. 用 Go 构建一个区块链 -- Part 3: 持久化和命令行接口