题目大意

给定 $n$($n$ 是偶数,$2\le n\le 2\times 10^{5}$)个非负整数 $a_1,\dots, a_n$($a_i\le 10^9$)。
要求将其中 $n/2$ 个数变成平方数,另外 $n/2$ 个数变成非平方数,变化后的数必须仍是非负整数。
将 $x$ 变成 $x'$ 的代价为 $|x-x'|$ 。
求最小的总代价。

比赛时我的思路

用 $c_{i,0}$ 表示将 $a_i$ 变成平方数的最小代价,$c_{i,1}$ 表示将 $a_i$ 变成非平方数的最小代价,不难求出这两个值。
那么问题转化为

从 $c_{1,0}, c_{2,0}, \dots, c_{n,0}$ 和 $c_{1,1}, c_{2,1}, \dots, c_{n,1}$ 中各取出 $n/2$ 个数,限制条件是:$c_{i,0}$ 和 $c_{i,1}$ 不能都取。
求取出的数的最小和。

比赛时我想到这里就进展不下去了。

转化后的问题的解法

对于任意一个合法的取数方案,如果不是最优解,则必然存在 $i, j$ 满足:

  1. $c_{i,0}, c_{j,1}$ 在所取的数中,且
  2. $c_{i,0} + c_{j,1} > c_{i,1} + c_{j,0}$ 。

第二个条件可化为
$c_{i,1} - c_{i,0} < c_{j,1} - c_{j,0}$

这样便得出这个问题的解法:

将下标 $1, 2,\dots,i,\dots, n$ 按 $c_{i,1} - c_{i,0} $ 从小到大排序,对前 $n/2$ 个下标取 $c_{i,1}$,对后 $n/2$ 个下标取 $c_{i,0}$ 。

题解上解法

统计输入的 $n$ 个数中平方数和非平方数的个数,分别记做 $c_0, c_1$。
若 $c_0 = c_1$ 则无需改变。
若 $c_0 > c_1$ 则需要把 $(c_0 - c_1)/2$ 个平方数变成非平方数。对于非零的平方数,加 1 即可,零则须加 2 。所以,优先改变非零的平方数。
若 $c_0 < c_1$ 则需把 $(c_0 - c_1)/2 $ 个非平方数变成平方数。

Codeforces 898E Squares and not squares的更多相关文章

  1. Codeforces Round #451 (Div. 2) [ D. Alarm Clock ] [ E. Squares and not squares ] [ F. Restoring the Expression ]

    PROBLEM D. Alarm Clock 题 OvO http://codeforces.com/contest/898/problem/D codeforces 898d 解 从前往后枚举,放进 ...

  2. 【27.40%】【codeforces 599D】Spongebob and Squares

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  3. Codeforces 599D:Spongebob and Squares

    D. Spongebob and Squares time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  4. Codeforces 314 E. Sereja and Squares

    http://codeforces.com/contest/314/problem/E 题意: 原本有一个合法的括号序列 擦去了所有的右括号和部分左括号 问有多少种填括号的方式使他仍然是合法的括号序列 ...

  5. Marching squares &amp; Marching cubes

    提要 Marching squares 主要是用于从一个地图(用二维数组表示)生成轮廓的算法.Marching cubes则相应的是在空间生成网格的方法.最常见的应用就是天气预报中气压图的生成.还经常 ...

  6. Codeforces Round #451 (Div. 2) A B C D E

    Codeforces Round #451 (Div. 2) A Rounding 题目链接: http://codeforces.com/contest/898/problem/A 思路: 小于等于 ...

  7. Codeforces Gym 100650D Queens, Knights and Pawns 暴力

    Problem D: Queens, Knights and PawnsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu ...

  8. Codeforces 193A. Cutting Figure

    看起来非常神,但仅仅有三种情况 -1 , 1 ,2..... A. Cutting Figure time limit per test 2 seconds memory limit per test ...

  9. Codeforces Round #451 & Codeforces Round #452

    Rounding Solution Proper Nutrition 枚举 Solution Phone Numbers 模拟 Solution Alarm Clock 贪心,好像不用线段树也可以,事 ...

随机推荐

  1. 手写IOC框架

    1.IOC框架的设计思路 ① 哪些类需要我们的容器进行管理 ②完成对象的别名和对应实例的映射装配 ③完成运行期对象所需要的依赖对象的依赖

  2. java基础—GUI编程(二)

    一.事件监听

  3. Bootstrap历练实例:动画的进度条

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  4. jquery Syntax error, unrecognized expression:的解决方法

    原文地址 https://blog.csdn.net/flowingfog/article/details/42739773 问题: 将模板的html内容转换成jquery时报以下错误:Syntax ...

  5. eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?

    eclipse 中main()函数中的String[] args如何使用? 右击你的项目,选择run as中选择 run configuration,选择arguments总的program argu ...

  6. 【转】MFC编辑框自动换行,垂直滚动条自动下移

    1.新建一个编辑框控件(Edit Control),将其多行(Multiline)前面打勾(属性设置为True),Auto HScroll前面的勾去掉(属性设置False),这样就可以实现每一行填满后 ...

  7. 转 Keras 保存与加载网络模型

    https://blog.csdn.net/qq_28413479/article/details/77367665

  8. 【最大流】bzoj1711: [Usaco2007 Open]Dining吃饭

    正在网络流入门(原来这种题用网络流做) Description 农夫JOHN为牛们做了很好的食品,但是牛吃饭很挑食. 每一头牛只喜欢吃一些食品和饮料而别的一概不吃.虽然他不一定能把所有牛喂饱,他还是想 ...

  9. 【php】命名空间的影响

    命名空间对代码的影响 类(包含抽象类和traits) 接口 常量 函数 ​

  10. Spring Cloud构建微服务架构(二)分布式配置中心

     注:此文不适合0基础学习者直接阅读,请先完整的将作者关于微服务的博文全部阅读一遍,如果还有疑问,可以再来阅读此文,地址:http://blog.csdn.net/sosfnima/article/d ...