当前位置: 首页 > news >正文

SCUT - 483 - 数轴上的点

https://scut.online/p/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;
}

转载于:https://www.cnblogs.com/Yinku/p/11337950.html

相关文章:

  • ruby on rails开发B/S的相关经验
  • Codeforces - 1202D - Print a 1337-string... - 构造
  • 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现大数据的高效分页显示...
  • 《学习之道》第十六章左脑的作用
  • Entity Framework 4.3尝试体会
  • 英汉《营销学》常用词汇-1
  • opencv源码解析之(2):滤波前言2
  • 流媒体服务器搭建实例——可实现录音,录像功能
  • Redis之hash数据结构实现
  • SCUT - G - 魔法项链 - 树状数组
  • SCUT - 482 - 生成树上的点 - Prufer
  • ACM算法相关资料
  • 洛谷 - P1462 - 通往奥格瑞玛的道路 - 二分 - Dijkstra
  • 洛谷 - P1522 - 牛的旅行 - Cow Tours - Floyd
  • wamp5环境配置基础教程
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • C++11: atomic 头文件
  • FineReport中如何实现自动滚屏效果
  • golang中接口赋值与方法集
  • hadoop集群管理系统搭建规划说明
  • JavaScript DOM 10 - 滚动
  • Linux CTF 逆向入门
  • PHP 的 SAPI 是个什么东西
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • yii2中session跨域名的问题
  • 和 || 运算
  • 基于axios的vue插件,让http请求更简单
  • 入口文件开始,分析Vue源码实现
  • 王永庆:技术创新改变教育未来
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • $().each和$.each的区别
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C#)一个最简单的链表类
  • (Git) gitignore基础使用
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (zhuan) 一些RL的文献(及笔记)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (七)Java对象在Hibernate持久化层的状态
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .Net Web窗口页属性
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .net打印*三角形
  • .NET开发者必备的11款免费工具
  • .NET设计模式(11):组合模式(Composite Pattern)
  • // an array of int
  • @AutoConfigurationPackage的使用
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @Query中countQuery的介绍
  • @test注解_Spring 自定义注解你了解过吗?
  • @Transactional 详解
  • @开发者,一文搞懂什么是 C# 计时器!
  • [\u4e00-\u9fa5] //匹配中文字符