Codeforces Round #572 (Div. 1)

A2

题意:给一棵树,带边权,互不相同且为偶数。每次操作是选两个叶子然后在路径上同时加一个数。初始边权全是0,求一个操作序列使得最终边权与给定边权相同。 \(n \le 1000\) ,构造的序列长度不超过 \(10^5\)

key:构造

首先,如果有二度点,那么一定无解。

所以现在每个点要不是叶子,要不就至少是三度。考虑一条边,我们只把它的边权改变,而不改变其他边。此时需要讨论这条边两段的点的度数。

如果两个点都是大于等于三度的,那么可以在一端中找到两个叶子,使得它俩的lca就是这个点。由于边权都是偶数,设其为2k,那么只需 add(a1,b1,k), add(a2,b2,k), add(a1,a2,-k), add(b1,b2,-k) 即可。其他情况同理

C

题意:给一个序列 \(b_i\) ,定义一个序列的 beauty 为 \(\min_{1\le i<j\le n}|a_i-a_j|\) 。求 \(b_i\) 中所有长度恰好为 k 的子序列的 beauty 之和。 \(k \le n \le 1000, b_i \le 10^5\)

key:dp

首先排序,然后考虑枚举beauty。可以发现 i 的转移是一个前缀和,并且随 i 单调不降,所以有一个O(n*k) 的dp。

其实真正有用的beauty不多,至多是 \(\frac{10^5}{k-1}\) ,所以复杂度是 \(O(10^5*n)\)

D

题意:给出 n 个数,每次操作是给一个数加上一个2的幂。求最少多少次操作使得整个序列的数字相同。 \(n \le 10^5, a_i \le 10^{17}\)

key:二进制,dp

显然最后全都相同的那个数至少是给定序列的最大值。并且 x 变成 y 所用的操作次数是 y-x 中二进制 1 的个数。

所以首先用最大值减去所有的数字得到新序列 \(b_i\) ,问题变成:给 \(b_i\) 加上一个数 t,使得所有数字的二进制中 1 的个数之和最小。

考虑 dp :只需要记录当前位的进位情况就能转移。但这样的状态空间是 \(2^n\) ,然而实际情况是远远小于的。

进位发生时,当且仅当 \(t \% 2^k+b_i\%2^k \ge 2^k\) 。所以如果对 \(b_i\) 按后 k 位二进制大小排序,那么只可能是一个后缀在进位。所以状态空间变成 O(n)

所以每次转移时,只需要枚举进位情况,然后枚举当前是0还是1,计算进位数。这个进位数一定是下一个状态的后缀,所以直接转移即可。如果排序用计数排序实现,那么复杂度是 \(O(62*n)\)

Codeforces Round #572 (Div. 1) 差E的更多相关文章

  1. Codeforces Round #573 (Div. 1) 差F

    Codeforces Round #573 (Div. 1) E 题意:二维平面上有 n 个点,你可以放至多 m 条直线使得 (0,0) 与每个点的连线至少与一条直线相交.求原点与所有直线的距离最小值 ...

  2. Codeforces Round #364 (Div. 1) (差一个后缀自动机)

    B. Connecting Universities 大意: 给定树, 给定2*k个点, 求将2*k个点两两匹配, 每个匹配的贡献为两点的距离, 求贡献最大值 单独考虑每条边$(u,v)$的贡献即可, ...

  3. Codeforces Round #572 (Div. 2)

    目录 Contest Info Solutions A. Keanu Reeves B. Number Circle C. Candies! D1. Add on a Tree D2. Add on ...

  4. Codeforces Round #401 (Div. 2) 离翻身就差2分钟

    Codeforces Round #401 (Div. 2) 很happy,现场榜很happy,完全将昨晚的不悦忘了.终判我校一片惨白,小董同学怒怼D\E,离AK就差一个C了,于是我AC了C题还剩35 ...

  5. Codeforces Round #114 (Div. 2)

    Codeforces Round #114 (Div. 2) 代码 Codeforces Round #114 (Div. 2) C. Wizards and Trolleybuses 思路 每条车的 ...

  6. Codeforces Round #373 (Div. 2)A B

    Codeforces Round #373 (Div. 2) A. Vitya in the Countryside 这回做的好差啊,a想不到被hack的数据,b又没有想到正确的思维 = = [题目链 ...

  7. Codeforces Round #368 (Div. 2) C. Pythagorean Triples(数学)

    Pythagorean Triples 题目链接: http://codeforces.com/contest/707/problem/C Description Katya studies in a ...

  8. Codeforces Round #275 (Div. 2) C - Diverse Permutation (构造)

    题目链接:Codeforces Round #275 (Div. 2) C - Diverse Permutation 题意:一串排列1~n.求一个序列当中相邻两项差的绝对值的个数(指绝对值不同的个数 ...

  9. Codeforces Round #525 (Div. 2)

    Codeforces Round #525 (Div. 2) 哎,忍不住想吐槽一下,又要准备训练,又要做些无聊的事,弄得我都想退出了. 好好的训练不好么???? 只能做出两道水题,其实C题,感觉做出来 ...

随机推荐

  1. SpringCloud学习之手把手教你用IDEA搭建入门项目【番外篇】(一)

    之前的文章里,我曾经搭建了一个Springcloud项目,但是那个时候我对于SpringCloud架构的很多组件不甚清楚,只是通过查找资料然后动手稀里糊涂的把一个项目成功搭建起来了,其中有很多不合理和 ...

  2. OpenStack(四)——使用Kolla部署OpenStack多节点云

    (1).实验环境 主机名 IP地址 角色 内存 网卡 CPU 磁盘 OpenStack-con 192.168.128.110 controller(控制) 8G 桥接网卡ens32和ens33 4核 ...

  3. .equal()和==的区别

    1.首先,equal和==最根本的区别在于equal是一个方法,而==是一个运算符. 2.一般来说,==运算符比较的是在内存中的物理地址,.equal()比较的是哈希算法值是否相等(即hashcode ...

  4. JavaWeb开发中遇到问题汇总

    一.基础问题 1.${pageContext.request.contextPath}获取相对路径无效 问题:在jsp中使用${pageContext.request.contextPath}获取相对 ...

  5. Maven--反应堆(Reactor)

    在一个多模块的 Maven 项目中,反应堆是指所有模块组成的一个构建结构.对于单模块的项目,反应堆就是该模块本身.但对于多模块项目来说,反应堆就包含了各模块之间继承与依赖的关系,从而能够自动计算出合理 ...

  6. 17.3.12--uillib模块

    1---uillib是python标准库中最常用的一个python网络应用资源访问的模块,他可以让你像访问文本一样,读取网页的内容 它的作用是访问一些不需要验证的网络资源和cookie等 uillib ...

  7. 吴裕雄--天生自然ShellX学习笔记:Shell 数组

    数组中可以存放多个值.Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似). 与大部分编程语言类似,数组元素的下标由0开始. Shell 数组用括号来 ...

  8. MyBatis从入门到精通(第4章):MyBatis动态SQL【foreach、bind、OGNL用法】

    (第4章):MyBatis动态SQL[foreach.bind.OGNL用法] 4.4 foreach 用法 SQL 语句中有时会使用 IN 关键字,例如 id in (1,2,3).可以使用 ${i ...

  9. OracleXE 11g user莫名过期

    参考大大的 环境sqlplus 1.sysdba登陆 SQL>conn sys as sysdba password 2.查看用户状态 SQL>select username,accoun ...

  10. jq轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...