[CSP-S模拟测试]:kill(二分答案+贪心)
题目传送门(内部题50)
输入格式
第一行包含四个整数$n,m,s$,表示人数、怪物数及任务交付点的位置。
第二行包含$n$个整数$p_1,p_2,...,p_n$。
第三行包含$n$个整数$q_1,q_2,...,q_n$。
输出格式
输出一行包含一个整数$ans$,表示答案。
样例
样例输入:
2 4 5
2 10
6 1 4 8
样例输出:
5
数据范围与提示
样例解释:
第一个人打位置为$4$的怪物,第二个人打位置为$8$的怪物,前者花$3$的时间,后者花$5$的时间,该方案对应的时间为$5$,且是一个最优方案。
数据范围:
对于所有数据:$1\leqslant p_i,q_i,s\leqslant {10}^9$。

题解
考虑二分答案,那么如何$judge$。
贪心解决,对于位于$s$右边的人,我们让他尽可能的打左边的怪兽,如果不能打就打右边的;反之同理。
注意边界问题即可。
时间复杂度:$\Theta(n\log \max(p_i,q_i,s)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
int n,m,s;
long long p[5001],q[5001],dis[5001];
bool judge(long long x)
{
int lft=0,rht=m+1;
for(int i=1;i<=n;i++)
{
if(p[i]>s)break;
while(abs(p[i]-q[lft])+dis[lft]>x)
{
lft++;
if(lft>m)return 0;
}
lft++;
if(lft>m)return 0;
}
lft--;
for(int i=n;i;i--)
{
if(p[i]<=s)break;
while(abs(p[i]-q[rht])+dis[rht]>x){rht--;if(!rht)return 0;}
rht--;
if(!rht)return 0;
}
rht++;
if(rht<=lft)return 0;
return 1;
}
int main()
{
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=n;i++)scanf("%lld",&p[i]);
for(int i=1;i<=m;i++)scanf("%lld",&q[i]);
sort(p+1,p+n+1);
sort(q+1,q+m+1);
for(int i=1;i<=m;i++)dis[i]=abs(q[i]-s);
dis[0]=dis[m+1]=1LL<<60;
long long lft=0,rht=1LL<<60;
while(lft<rht)
{
long long mid=(lft+rht)>>1;
if(!judge(mid))lft=mid+1;
else rht=mid;
}
cout<<lft<<endl;
return 0;
}
rp++
[CSP-S模拟测试]:kill(二分答案+贪心)的更多相关文章
- BZOJ_2196_[Usaco2011 Mar]Brownie Slicing_二分答案+贪心
BZOJ_2196_[Usaco2011 Mar]Brownie Slicing_二分答案+贪心 Description Bessie烘焙了一块巧克力蛋糕.这块蛋糕是由R*C(1 <= R,C ...
- 洛谷3933 Chtholly Nota Seniorious 二分答案+贪心
题目链接 题意 给你一个N*M的矩阵 (N,M <=2000) 把他分成两部分 使两部分的极差较大的一个最小 求这个最小值.然后分矩阵的要求是:每个部分内部的方块之间,可以通过上下左右相互到 ...
- 【二分答案+贪心】UVa 1335 - Beijing Guards
Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the Imperial City ...
- 【二分答案+贪心】解决“最小值最大”问题(UVa 12124 - Assemble)
Problem A - Assemble Time limit: 2 seconds Recently your team noticed that the computer you use to p ...
- 【洛谷】【二分答案+贪心】P1316 丢瓶盖
[题目描述:] 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? [ ...
- BZOJ5321 JXOI2017加法(二分答案+贪心+堆+树状数组)
二分答案后得到每个位置需要被加的次数.考虑贪心.从左到右考虑每个位置,将以该位置为左端点的区间按右端点从大到小加进堆.看该位置还需要被加多少次,如果不需要加了就不管,否则取堆顶区间将其选择,BIT实现 ...
- Gym 100886J Sockets 二分答案 + 贪心
Description standard input/outputStatements Valera has only one electrical socket in his flat. He al ...
- bzoj 4310 跳蚤 —— 后缀数组+二分答案+贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4310 二分答案——在本质不同的子串中二分答案! 如果二分到的子串位置是 st,考虑何时必须分 ...
- B1816 扑克牌 二分答案 + 贪心
这个题我一开始想到了二分答案,但是去写了另一个算法,用优先队列直接模拟,最后GG了...因为我没考虑每个套牌只能有一个joker...尴尬. 后来二分答案,然后暴力验证就行了. 题干: Descrip ...
随机推荐
- phpcms php格式化 时间戳
用PHPCMS V9 建站时,经常会用到时间标签,它是通用标签调用-日期时间格式化,适用全站. 一.日期时间格式化显示: a\标准型:{date('Y-m-d H:i:s', $rs['inputti ...
- Java + selenium 元素定位(6)之iframe切换(即对富文本框的操作)
在元素定位中,对富文本框的元素定位是特别的,当我们使用普通的元素定位方法对富文本框进行操作时,我们会发现不管我们之前介绍的八种方法中的任何方法,我们都不能成功定位到富文本框,并对其进行操作.那是因为富 ...
- LeetCode 230. Kth Smallest Element in a BST 动态演示
返回排序二叉树第K小的数 还是用先序遍历,记录index和K进行比较 class Solution { public: void helper(TreeNode* node, int& idx ...
- [LeetCode] 477. Total Hamming Distance(位操作)
传送门 Description The Hamming distance between two integers is the number of positions at which the co ...
- git团队协作代码提交步骤
我们公司由五个人同时开发一个项目,大佬建好仓库后叫我们统一提交到dev这个分支,我的分支是hardy,你们只要将这两个值改成你们团队协作中使用的分支即可.代码如下: git add . git com ...
- jsoncpp解析非json串
转自:https://www.cnblogs.com/huojing/articles/5927488.html 由于Jsoncpp解析非法json时,会自动容错成字符类型.对字符类型取下标时,会触发 ...
- 手写call、apply、bind
区别&联系 三者都是指定函数执行时的上下文,第一个参数都是上下文: call从第二个参数开始,后续所有的参数传递给函数执行: apply第二个参数是一个数组,传递给函数执行: bind返回一个 ...
- UIView与CALayer 区别
在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个 ...
- JavaScript面向对象编程(2)-- 类的定义
最近这一段时间事情太多了,没有时间再继续写,幸好这两天有点小闲,先小写一下JavaScript中面向对象一中推荐的方法.本文承接上一篇JavaScript面向对象编程(1) -- 基础. 上篇说过,J ...
- 2018-2-13-C#-Find-vs-FirstOrDefault
title author date CreateTime categories C# Find vs FirstOrDefault lindexi 2018-2-13 17:23:3 +0800 20 ...