Closest Cow Wins S 最近的奶牛获胜

题目传送门

文章目录

  • Closest Cow Wins S 最近的奶牛获胜
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
    • 思路
    • code

题目描述

Farmer John 沿着一条高速公路拥有一个很长的农场,可以被看作类似于一维数轴。沿着农场有 K K K 块草地( 1 ≤ K ≤ 2 ⋅ 1 0 5 1 \leq K \leq 2\cdot 10^5 1≤K≤2⋅105);第 i i i 块草地位于位置 p i p_i pi​ 并具有美味值 t i t_i ti​( 0 ≤ t i ≤ 1 0 9 0\le t_i\le 10^9 0≤ti​≤109)。Farmer John 的死对头 Farmer Nhoj 已经将他的 M M M 头奶牛( 1 ≤ M ≤ 2 ⋅ 1 0 5 1 \leq M \leq 2\cdot 10^5 1≤M≤2⋅105)放在了位置 f 1 … f M f_1 \ldots f_M f1​…fM​ 。所有这些 K + M K+M K+M 个位置均是 [ 0 , 1 0 9 ] [0,10^9] [0,109] 范围内的不同整数。

Farmer John 需要选择 N N N( 1 ≤ N ≤ 2 ⋅ 1 0 5 1\le N\le 2\cdot 10^5 1≤N≤2⋅105)个位置(不一定是整数)放置他的奶牛。这些位置必须与 Farmer Nhoj 的奶牛已经占用的位置不同,但是 Farmer John 可以将他的奶牛放在与草地相同的位置。

拥有最靠近某个草地的奶牛的农夫拥有这一草地。如果来自两方农夫的两头奶牛距这一草地相等,则 Farmer Nhoj 拥有该草地。

给定 Farmer Nhoj 的奶牛的位置以及草地的位置和美味值,求 Farmer John 的奶牛以最优方式放置时可以达到的最大总美味值。

输入格式

输入的第一行包含 K K K、 M M M 和 N N N。

以下 K K K 行每行包含两个空格分隔的整数 p i p_i pi​ 和 t i t_i ti​。

以下 M M M 行每行包含一个整数 f i f_i fi​。

输出格式

输出一个整数,表示最大总美味值。注意这个问题的答案可能无法用 32 位整数型存储,你可能需要使用 64 位整数型(例如,C 或 C++ 中的 “long long”)。

样例 #1

样例输入 #1

6 5 2
0 4
4 6
8 10
10 8
12 12
13 14
2
3
5
7
11

样例输出 #1

36

提示

【样例解释】

如果 Farmer John 将奶牛放在位置 11.5 11.5 11.5 和 8 8 8 则他可以得到总美味值 10 + 12 + 14 = 36 10+12+14=36 10+12+14=36。

思路

先按照坐标排序

找出要占领每个草堆的最小距离,以这个为半径记录一条线段

暴力查找被最多线段覆盖的点

有一些小细节,自己看一下就好了。

code

 #include <bits/stdc++.h>
#define LL long long
#define fu(x , y , z) for(int x = y ; x <= z ; x ++)
using namespace std;
const int N = 2e5 + 5;
const LL inf = 1e18 + 5;
LL ans;
LL k , m , n , cow[N] , tot = 1 , v[N];
struct node {LL p , t;
} re[N];
struct Q {LL l , r , t;
} q[N];
bool cmp(node x , node y) { return x.p < y.p; }
bool cmp2(Q x , Q y) {if (x.l < y.l) return 1;if (x.l == y.l && x.r < y.r) return 1;else return 0;
}
int main () {scanf ("%lld%lld%lld" , &k , &m , &n);fu (i , 1 , k) scanf ("%lld%lld" , &re[i].p , &re[i].t);fu(i , 1 , m) scanf ("%lld" , &cow[i]);sort (re + 1 , re + k + 1 , cmp) , sort (cow + 1 , cow + m + 1);fu (i , 1 , k) {int r = upper_bound(cow + 1 , cow + m + 1 , re[i].p) - cow;int l = r - 1;if (r == 1)q[i].l = max (0ll , re[i].p - (cow[r] - re[i].p)) , r = cow[r];else if (r == m + 1)q[i].l = cow[l] , q[i].r = min (re[i].p + re[i].p - cow[l] , inf);else if (re[i].p - cow[l] <= cow[r] - re[i].p)q[i].l = cow[l] , q[i].r = min (re[i].p + (re[i].p - cow[l]) , inf);else q[i].l = max (0ll , re[i].p - (cow[r] - re[i].p)) , q[i].r = cow[r];q[i].t = re[i].t;}sort (q + 1 , q + k + 1 , cmp2);v[tot] = q[1].t;fu (i , 2 , k) {if (q[i].l < q[i - 1].r) v[tot] += q[i].t , q[i].r = q[i - 1].r;else v[++tot] += q[i].t;}sort (v + 1 , v + tot + 1);int o = 0;for (int i = tot ; i >= 1 ; i --) {ans += v[i];o ++;if (o == n) printf ("%lld" , ans) , exit (0);}
}

Closest Cow Wins S 最近的奶牛获胜相关推荐

  1. P7990-[USACO21DEC]Closest Cow Wins S【堆,贪心】

    正题 题目链接:https://www.luogu.com.cn/problem/P7990 题目大意 数轴上有kkk个点是草地,每个草地有不同收益,mmm个点是地方的点,现在你要放置nnn个我方的点 ...

  2. python实现微信机器人: 登录微信、消息接收、自动回复功能

    这篇文章主要介绍了python实现微信机器人: 登录微信.消息接收.自动回复功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 ...

  3. 2021 USACO Dec 题解

    前言:最近开始刷usaco的silver了,希望12月份时可以过silver (害怕) P1 Closest Cow Wins (滑动窗口,数学): FN和FJ是死对头,在一条数轴有 k 块草,第 i ...

  4. Problem:Cow Art

    Problem:Cow Art Description 一个有关奶牛的鲜为人知的事实是她们都是红绿色盲,也就是说,在她们看来,红色和绿色是一样的(译者注:奶牛把这种颜色称作"红绿色" ...

  5. 英汉翻译词典软件代码

    Private Sub Command1_Click() Dim i, j As String Dim n As Integer i = Text1.Text For n = 1 To 6 Selec ...

  6. 新英汉翻译词典软件vb代码

    Private Sub Command1_Click() Dim i, Z As String Dim n As Integer i = Text1.Text For n = 1 To 960 Sel ...

  7. 用法与区别_指示代词this, that, these, those的区别和用法

    今天学习指示代词this, that, these和those的用法. 先来看包括this和that的2个句子. 图片来源于网络 我们看图片中手和物品的距离. 在左边的图片中, 苹果就在手边,这个人指 ...

  8. Round Numbers POJ - 3252(数位dp+判断前导零)

    题意 求二进制表示中0的个数大于1的数的个数. 题目 The cows, as you know, have no fingers or thumbs and thus are unable to p ...

  9. python剪刀石头布_如何用python写剪刀石头布

    如何用python写剪刀石头布 发布时间:2020-07-20 11:52:16 来源:亿速云 阅读:111 本篇文章给大家分享的是有关如何用python写剪刀石头布,小编觉得挺实用的,因此分享给大家 ...

最新文章

  1. python中如何调用java_在Python程序中调用Java代码的实现
  2. zookeeper 密码_「附源码」Dubbo+Zookeeper 的 RPC 远程调用框架
  3. [html] 说说你对target=“_blank“的理解?有啥安全性问题?如何防范?
  4. 数组对象的slice和splice方法
  5. 2017.3.5 yveh测试
  6. 估值150亿,账上还有近10亿现金,却减员500人,这家公司CEO的说法你认同吗?...
  7. 【Redis】3、Redis集群部署
  8. linux cpu intr s,mpstat命令(linux cpu监控工具)
  9. 昨天和一位成功的创业者聊天,他说了一番话,有价值,与大家分享
  10. linux下安装配置svn独立服务器
  11. SendMessage函数完全使用手册 (转)
  12. #博学谷it学习技术支持# Java学习心得
  13. 计算机术语中bug指的是,你知道电脑漏洞为什么叫bug吗?
  14. Go语言:HTTP客户端请求设置用户浏览器版本User-Agent
  15. 对接环信踩坑记(环信客服+IMSDk即时通信)
  16. CTFshow之36Dweb做题记录
  17. 数据治理的四字箴言:理、采、存、用
  18. msvc2017配置qt5.12.8 x86和x64库版本切换
  19. StringBuffer讲解及StringBuffer和String之间的关系
  20. Java初学者快速上手之实战“套路”

热门文章

  1. Vijos 1029 晴天小猪历险记之Number【BFS+康托展开】
  2. 百度Q3财报解读:“云+AI”酝酿新动能
  3. 加密市场强势反弹 BTC大涨超10%,续刷前期新高
  4. H3C G3 配置raid和远程管理
  5. c语言百科园题库及答案,百科园C语言题库
  6. dell计算机的硬盘如何分区,戴尔电脑装完win10系统之后怎么分区?戴尔电脑win10系统分区步骤...
  7. 人大金仓共建“深圳市教育技术信创实验室”,加速推进教育数字化转型
  8. 某科技公司领导很赤裸裸:“ 80 后该退出 IT 行业” !工作群里爆粗口,直接@员工滚...
  9. Revit软件生成过梁操作,一下子处理几百根过梁
  10. 生产线平衡问题的+Leapms线性规划方法