SCUT - 483 - 数轴上的点
改了题目之后发现,其实n个点放在[1,2N],要求间距至少是2,那么有且只有一个点和前面点的间距是3(设-1存在一个点),其他点的间距都必须是2。排序后枚举这个点,这个点之前的点向左移动到尽头,这个点及其之后的点向右移动到尽头。显然这样考虑了所有的情况。考虑如何计算花费,预处理每个排序后的点去往他要去的位置的左尽头和右尽头绝对值前缀和,那么枚举断点的时候可以计算出两端的花费,假如是当前最低的则加入答案之中。
当时读错题了,以为不同移动的路径属于不同方法。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1000000 + 5;
const ll INF = 1e18;
int n, a[MAXN], l[MAXN], r[MAXN];
ll prefixl[MAXN], prefixr[MAXN];
ll minsum;
int mini[MAXN], mitop;
//mini把i及其右侧的归到右边会产生最小值
int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
while(~scanf("%d", &n)) {
for(int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
}
sort(a + 1, a + 1 + n);
for(int i = 1; i <= n; ++i) {
l[i] = abs(a[i] - (2 * i - 1));
r[i] = abs(a[i] - (2 * i));
prefixl[i] = prefixl[i - 1] + l[i];
prefixr[i] = prefixr[i - 1] + r[i];
}
mitop = 0;
minsum = INF;
for(int i = 1; i <= n + 1; ++i) {
if(prefixl[i - 1] + prefixr[n] - prefixr[i - 1] <= minsum) {
if(prefixl[i - 1] + prefixr[n] - prefixr[i - 1] == minsum) {
mini[++mitop] = i;
} else {
minsum = prefixl[i - 1] + prefixr[n] - prefixr[i - 1];
mini[mitop = 1] = i;
}
}
}
printf("%lld %d\n", minsum,mitop);
}
return 0;
}
SCUT - 483 - 数轴上的点的更多相关文章
- Codeforces Round #466 (Div. 2) A. Points on the line[数轴上有n个点,问最少去掉多少个点才能使剩下的点的最大距离为不超过k。]
A. Points on the line time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 给定数轴上的n个点,求距离最近的两个点的距离
public class MinimumSpacing { //给定平面上的n个点,求距离最近的两个点的距离. //无从下手的话,先分解问题,分解成简单的,逐个分析,然后再合在一起考虑 //这是个2维 ...
- SCUT - 484 - 平面上的点 - 数据结构
https://scut.online/p/484 一开始想的是按固定斜率的直线从无穷扫下来,但是一直都WA,不知道是哪里错了还是精度问题? #include<bits/stdc++.h> ...
- 数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。
#include <iostream> using namespace std; int maxCover(int* a, int n, int l) { ; ; ; while(end ...
- 关于scut在unity上的主动推送
自带的samples里面,chat的例子涉及主动推送,可作为参考. 在unity里面接收主动推送用Net.CommonCallback 服务端最近的新版本更改了接口,有两种方法推送: ActionFa ...
- SCUT - 486 - 无向图上的点 - Dijkstra
好像原题是这个?https://www.cnblogs.com/kanchuang/p/11120052.html 这个有解释:https://blog.csdn.net/wddwjlss/artic ...
- 【codevs1191】数轴染色 线段树 区间修改+固定区间查询
[codevs1191]数轴染色 2014年2月15日4317 题目描述 Description 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色.接着我们进行M次操作,第i次操作将[L ...
- 【wikioi】1191 数轴染色(线段树+水题)
http://wikioi.com/problem/1191/ 太水的线段树了,敲了10分钟就敲完了,但是听说还有一种并查集的做法?不明觉厉. #include <cstdio> #inc ...
- Codevs 1191 数轴染色
1191 数轴染色 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一条数轴上有N个点,分别是1-N.一开始所有的点都被染成黑色. ...
随机推荐
- CF Round #576 (Div. 2) Matching vs Independent Set
链接:Click here 题目意思:给你一个图,有3n个点,m条边,求是否有n条匹配边或n个独立点,其中匹配为没有公共点,独立为不相连 Solution: 考虑每个点对于第一种情况,最多只能贡献一次 ...
- BZOJ3438 小M的作物(和拓展)
题目链接:戳我 我们如果要选择一种种植情况的话,一定是其他的选择都不可行了.这种决策问题用最小割来处理最好不过. 建图方式--A为源点,B为汇点.然后将每个点分别向A,B连边,边权为种植它的价值.组合 ...
- Vue.js 使用 Font Awesome 小图标
1.安装 Font Awesome npm i --save @fortawesome/fontawesome-svg-core npm i --save @fortawesome/free-soli ...
- JMS学习五(ActiveMQ的本地事务)
1.ActiveMQ的本地事务 在一个JMS客户端,可以使用本地事务来组合消息的发送和接收.JMS Session接口提供了commit和rollback方法.事务提交意味着生产的所有消息被发送,消费 ...
- 【转】博弈论——acm
转自http://blog.csdn.net/lgdblue/article/details/15809893 序:博弈是信息学和数学试题中常会出现的一种类型,算法灵活多变是其最大特点,而其中有一类试 ...
- 2-gitblit添加项目,项目成员
创建代码仓库,如下图所示, 然后填个项目的名称和描述即可点击保存. 用户也是,还是相同的位置,点击用户,而不是用户中心,创建用户也是填写用户名称和简称,最后对在旁边有个用户的权限,选择相应的代码仓库即 ...
- Eclipse怎样对项目进行重命名?
当创建一个项目时,可能会随便命名一个项目名,如果想要项目名更有意义,或者为了方便后续项目的命名,怎么重命名项目名呢? 第一步在我们的电脑打开eclipse软件,找到需要重命名的项目,如下图所示: 第二 ...
- Module——模块加载语法
简介:标准module用法: 模块功能主要由两个命令构成:export和import. export有三种写法: // profile.js // 写法一 export var m = 1; // 写 ...
- 测试常用linux命令之系统监测
top命令: cpu使用情况,内存等 du -hs: 查看目录大小 df -h :查看磁盘使用情况 free: 查看电脑整体内存使用情况 uptime:系统时间,用户数目等 vmstat:内存使用,进 ...
- mvn deploy上传私服Nexus时遇到的坑--ReasonPhrase: Forbidden.
用maven deploy上传jar包时,遇到了ReasonPhrase: Forbidden 错误,截图如下: 折腾了好久,终于解决,现把步骤简单记录如下: 1.自建仓库eagle-sky: 2.设 ...