[Luogu 4998 信号塔] 题解报告
- 估计没人看的简化版题意:
给定一个数轴,以及数轴上的 \(n\) 个点(这些点可能坐落在同一坐标上),第 \(i\) 个点的坐标为 \(a_i\) 。现在要在数轴上找 \(k\) 个点,第 \(i\) 个点的坐标为 \(x_i\) 。求这 \(k\) 个点到原数轴上 \(n\) 个点距离和的最小值,即 \(min(\sum_{i = 1}^{k} \sum_{j = 1}^{n} |x_i - a_j|)\).
注:\(n,\ a_i \leq 10^6,\ k \leq n\)
- 题目分析:
首先,最容易想到的就是暴力模拟。循环枚举坐标,对于每个坐标,求出其到 \(n\) 个点的距离和。最后再将距离和升序排列。时间复杂度 $O(an) = $TLE
现在从两个方向考虑优化:
- 减少枚举数量。也就是减少 \(x\) 的枚举数量。
- 减少计算过程。也就是降低求 \(x_i\) 到 \(a_j\) 距离和的复杂度。
而由于 \(x\) 与其他点的距离没有方便计算的函数表示,所以减少枚举数量是不现实的(可能是因为我太弱了)
那么怎样减少计算过程呢??
设一个点 \(x\) 到所有 \(a\) 的距离和为 \(s\)。
我们可以发现,如果 \(x\) 往前走一个单位长度,那么它与它前面点的距离就都会加一,与后面点的距离都会减一。
设 \(x\) 往前移动一位后, \(x\) 前面有 \(c\) 个点,后面有 \(n - c\) 个点。
那么,距离就会变为:\(s + c - (n - c)\)。
所以,我们在枚举信号站坐标的时候,就可以顺带着将信号站到其他点的距离用 \(O(1)\) 算出来
时间复杂度为 \(O(a)\)
代码大概长这样(由于空间有限,就不在这里放了) Wrong Code
然后就惊喜的发现 Wa 了一个点 ...
发现我代码中的错误是在一天之后了。我忽然发现,信号站是有可能建在负数坐标上的,举个栗子:
数轴上点的坐标为: \(a = [0, 0, 0, 0, 0]\)
我们要选择5个信号站。
那么,最优解应该是 \(x = [0, 1, 2, -1, -2]\).
这样,我们的信号站就选到了负数点上。
这样,我们只需要将信号站枚举起点换成 \(-10^6\) (因为 \(k \leq 10^6\) 嘛)。由于数组下标不能是负数,所以我们在数组上加上一个偏移量 \(delta\),让数组下标变成正数即可。
- Code
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 1000010, M = N << 1;
LL f[M];
int p[N];
int delta = 1e6;
int n, m;
int Map[N];
int main()
{
scanf("%d%d", &n, &m);
LL s = 0;
for (int i = 1; i <= n; i ++ )
{
scanf("%d", &p[i]);
Map[p[i]] ++ ;
s += (p[i] + 1e6);
}
sort(p + 1, p + n + 1);
int l = 0, r = n;
f[0] = s;
for (int i = -1e6 + 1; i <= 1e6; i ++ )
{
f[i + delta] = f[i - 1 + delta] + l - r;
if (i < 0) continue;
if (Map[i]) l += Map[i], r -= Map[i];
}
sort(f, f + 2000000 - 1);
LL res = 0;
for (int i = 0; i < m; i ++ )
res += f[i];
printf("%lld\n", res);
return 0;
}
[Luogu 4998 信号塔] 题解报告的更多相关文章
- Luogu P4204 神奇口袋 题解报告
题目传送门 [题目大意] 一个口袋里装了t种颜色的球,第i种颜色的球的数目为a[i],每次随机抽一个小球,然后再放d个这种颜色的小球进口袋. 给出n个要求,第x个抽出的球颜色为y,求满足条件的概率. ...
- Luogu P4358 密钥破解 题解报告
题目传送门 [题目大意] 给定一个正整数N,可以被分解为两个不同的质数p和q,计算出r=(p-1)*(q-1). 然后给出了一个小于r且与r互质的整数e,已知e*d≡1(mod r),求d. 最后给定 ...
- 【BZOJ2823】[AHOI2012]信号塔(最小圆覆盖)
[BZOJ2823][AHOI2012]信号塔(最小圆覆盖) 题面 BZOJ 洛谷 相同的题: BZOJ1 BZOJ2 洛谷 题解 模板题... #include<iostream> #i ...
- 2015浙江财经大学ACM有奖周赛(一) 题解报告
2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...
- bzoj2823[AHOI2012]信号塔
2823: [AHOI2012]信号塔 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1190 Solved: 545[Submit][Status ...
- cojs 强连通图计数1-2 题解报告
OwO 题目含义都是一样的,只是数据范围扩大了 对于n<=7的问题,我们直接暴力搜索就可以了 对于n<=1000的问题,我们不难联想到<主旋律>这一道题 没错,只需要把方程改一 ...
- cojs 二分图计数问题1-3 题解报告
OwO 良心的FFT练手题,包含了所有的多项式基本运算呢 其中一部分解法参考了myy的uoj的blog 二分图计数 1: 实际是求所有图的二分图染色方案和 我们不妨枚举这个图中有多少个黑点 在n个点中 ...
- 2018.07.04 BZOJ 2823: AHOI2012信号塔(最小圆覆盖)
2823: [AHOI2012]信号塔 Time Limit: 10 Sec Memory Limit: 128 MB Description 在野外训练中,为了确保每位参加集训的成员安全,实时的掌握 ...
- poj3020 建信号塔(匈牙利算法 最小覆盖边集)
Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10518 Accepted: 518 ...
- 题解报告:hdu 1398 Square Coins(母函数或dp)
Problem Description People in Silverland use square coins. Not only they have square shapes but also ...
随机推荐
- 20个最佳实践提升Terraform工作流程|Part 2
在上一部分,我们一同探讨了构建 Terraform 项目的一些策略,以及使用 Terraform 管理 IaC 的部分最佳实践.今天,我们将继续深入研究将 Terraform 代码提升到新水平的具体要 ...
- Convolutional neural network (CNN)–extreme learning machine (ELM)
1. 介绍 论文:(2020)Neural networks for facial age estimation: a survey on recent advances. 地址: http://li ...
- CF1368B
题目简化和分析: 因为要求长度最小,所以我们每个字符就应该发挥最大的价值,不会有没有作用的字符. 设有 \(x_1\) 个 \(c\) ,\(x_2\) 个 \(o\) ,\(x_3\) 个 \(d\ ...
- 深入理解 Skywalking Agent
概述 Agent 功能介绍 + 整体结构 + 设计 插件机制详解 Trace Segment Span 详解 异步 Trace 详解 如何正确地编写插件并防止内存泄漏 扩展:如何基于 Skywalki ...
- 从一次Kafka宕机说起(JVM hang)
一.背景 时间大概是在夏天7月份,突然收到小伙伴的情报,我们线上的一个kafka实例的某个broker突然不提供服务了,也没看到什么异常日志,反正就是生产.消费都停了.因为是线上服务,而且进程还在,就 ...
- 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(10) -- 在DataGrid上直接编辑保存数据
有时候,一些数据的录入可能需要使用表格直接录入会显得更加方便快捷,这种情况有时候也是由于客户使用习惯而提出,本篇随笔介绍在WPF应用端上使用DataGrid来直接新增.编辑.保存数据的处理. 录入数据 ...
- 【虹科干货】Redis 开发者需要了解的缓存驱逐策略
在你搭建并配置了一个Redis数据库之后,Redis成功地提升了应用程序性能.然而这里有一个潜在问题,随着缓存数据的快速增加和内存占用率的逐渐上升,你很快会发现Redis缓存容量即将达到硬件存储容量上 ...
- 最新 2023.2 版本 WebStorm 永久破解教程,WebStorm 破解补丁永久激活(亲测有效)
最近 jetbrains 官方发布了 2023.2 版本的 IDEA,之前的激活方法并不支持这个新的版本. 下面是最新的激活教程,激活步骤和之前是类似的,只是换用了不同的补丁文件. 本教程支持 Jet ...
- 浅析Redis大Key
一.背景 在京东到家购物车系统中,用户基于门店能够对商品进行加车操作.用户与门店商品使用Redis的Hash类型存储,如下代码块所示.不知细心的你有没有发现,如果单门店加车商品过多,或者门店过多时,此 ...
- P8368 [LNOI2022] 串 题解
题目链接 题目分析 题目要求我们构造一个最长的 \(T\) 序列,我们首先从每个 \(T_i\) 入手,思考如何安排才能合法. 容易观察到对于每个 \(T_i\),合法的 \(T_{i-1}\) 有两 ...