[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 ...
随机推荐
- SpringBoot项目优雅停机+Pid暴力停机
bootstrap.yaml配置项目的pid输出位置 spring: pid: file: F:/cloud-nacos/cloud_gateway/application.pid springboo ...
- linux日常运维(一)
- 进程管理ps.top - 任务计划crontab 进程管理 概念:进程是在自身的虚拟地址空间运行的一个单独的程序. 进程和程序区别:程序只是一个静态的命令集合,不占系统的运行资源:而进程是一个随时 ...
- ModelScope
欢迎来到ModelScope平台!本篇文章介绍如何快速开始使用ModelScope平台上的模型,包括所需的基础概念,环境安装,模型推理和训练的快速实践示例. 如何开始# 如果你是新手,想快速体验产品, ...
- win10系统单独编译和使用WebRTC的回声消除(AEC)、音频增益(AGC)、去噪(NS)模块
一.简介 本人想单独编译并使用WebRTC的音频回声消除模块,奈何技术有限,于是在百度的海洋里大海捞针,发现了https://www.cnblogs.com/mod109/p/5827918.html ...
- 畅捷通T+任意文件上传(CNVD-2022-60632 )漏洞复现
一.漏洞描述 022年8月29日和8月30日,畅捷通公司紧急发布安全补丁修复了畅捷通T+软件任意文件上传漏洞.未经身份认证的攻击者利用该漏洞,通过绕过系统鉴权,在特定配置环境下实现任意文件的上传,从而 ...
- [ABC216G] 01Sequence 题解
01Sequence 题目大意 构造一个满足 \(m\) 个形如 \((l,r,x)\) 的限制条件的 \(01\) 序列,其中 \((l,r,x)\) 表示区间 \([l,r]\) 的和不小于 \( ...
- 每天5分钟复习OpenStack(八)存储虚拟化
KVM存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的.Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种类型,Volume 是在 Storage P ...
- HTTP请求中浏览器的缓存机制(转)
摘要:在Web开发过程中,我们可能会经常遇到浏览器缓存的问题.本文作者详细解释了浏览器缓存的机制,帮助读者更深层次的认识浏览器的缓存. 流程 当资源第一次被访问的时候,HTTP头部如下 (Reques ...
- 四个id 生成器性能比较记录
IdGenerator Seata 优化的雪花算法 Seata基于改良版雪花算法的分布式UUID生成器分析 关于新版雪花算法的答疑 csharp 移植代码 public class IdGenerat ...
- NLP技术如何为搜索引擎赋能
在全球化时代,搜索引擎不仅需要为用户提供准确的信息,还需理解多种语言和方言.本文详细探讨了搜索引擎如何通过NLP技术处理多语言和方言,确保为不同地区和文化的用户提供高质量的搜索结果,同时提供了基于Py ...