二分题 D - Salary Changing codeforce
题意:给出n个人(n是奇数),s钱;s为总的可以付工钱的钱;
每一个工人有一个付工钱的区间,只要在这个区间范围内,随便一个数都可以当作给这个工人付了钱;
老板要付给每个工人钱,并且付钱的中位数要尽可能大;
问:最大的中位数是多少;
思路:贪心+思维+二分;
我们以中位数为主体进行二分。那么就需要n/2+1个大于等于中位数的数;
这个时候我们先给钱排序,按第一个数从大到小排;
然后check部分,从1到n遍历,如果满足x在区间范围内,就取x这个数;
那么,为什么就要取这个数呢,因为我们迟早要凑到n/2+1个数,所以从大到小的排序,可以让我们在使用的钱
最少的情况下,取出这n/2+1个这样的数; 比如有这样两个区间“6 10” ”7 11“ 按从大到小排序,我们假如中位数为8;
我们假如“6 10" 取中位数8 ”7 11“ 取左端点7 那么结果为15
如果”7 11“ 取中位数, 另一个取左端点,则结果为14;
所以代码如下
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+;
struct node
{
int l,r;
}a[maxn];
ll n;ll s;
bool cmp(node x,node y)
{
return x.l>y.l;
}
int check(ll x)
{
ll sum=;
ll num=n/+;
for(int i=;i<=n;i++){
//当num==0之后,所需要的大于等于n/2+1已经满足,所以都取
//左端点即可;
if(x>=a[i].l&&x<=a[i].r&&num>){
sum+=x;
num--;
}
else{
sum+=a[i].l;
if(a[i].l>=x) num--;
}
}
if(num>) return ;
else{
if(sum>s) return ;
else return ;
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%lld%lld",&n,&s);
for(int i=;i<=n;i++){
scanf("%d%d",&a[i].l,&a[i].r);
}
sort(a+,a++n,cmp);
ll l=a[n/+].l;ll r=s;
ll ans=l;
while(l<=r){
ll mid=l+r>>;
if(check(mid)){
ans=mid;
l=mid+;
}
else r=mid-;
}
printf("%lld\n",ans);
}
return ;
}
二分题 D - Salary Changing codeforce的更多相关文章
- Codeforces 1251D Salary Changing
D. Salary Changing 大意: 有n个变量, 每个变量有一个取值区间, 要求给这n个变量赋值, 使得n个变量的和不超过S且中位数尽量大(n一定为奇数) 二分答案, 中位数大于等于mid就 ...
- codeforces 1251D Salary Changing (二分+贪心)
(点击此处查看原题) 题意分析 一共有s元钱,要用这些钱给n个人发工资,发给每个人的工资si有最少和最多限制 si ∈[li,ri],在发给n个人的总工资小于s的情况下,要求发给n个人中的工资的中位数 ...
- 一些简单二分题,简单的hash,H(i),字符串题
说在前面: 题是乱七八糟的. 几个二分的题. (但是我的做法不一定是二分,有些裸暴力. 1. Equations HDU - 1496 输入a,b,c,d问你这个方程有多少解.a*x1^2+b*x2^ ...
- WQS二分题集
WQS二分,一种优化一类特殊DP的方法. 很多最优化问题都是形如“一堆物品,取与不取之间有限制.现在规定只取k个,最大/小化总收益”. 这类问题最自然的想法是:设f[i][j]表示前i个取j个的最大收 ...
- Educational Codeforces Round 75 (Rated for Div. 2) D. Salary Changing
链接: https://codeforces.com/contest/1251/problem/D 题意: You are the head of a large enterprise. n peop ...
- POJ_3122 经典二分题
Pie Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8594 Accepted: 3124 Special Jud ...
- D. Salary Changing(找中位数)
题:https://codeforces.com/contest/1251/problem/D 题意:给你n个单位需要满足达到的区间,再给个s,s是要分配给n的单位的量,当然∑l<=s,问经过分 ...
- Cable master(二分题 注意精度)
Cable master Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26596 Accepted: 5673 Des ...
- codeforces D Salary Changing
题意:给你n个人,和s块钱,每个人都有一个工资区间,你给所有人都发工资.然后要他们工资的中位数最大. 思路:二分找那个值.那个值要满足至少有n/2+1个工资区间内. #include<cstdi ...
随机推荐
- 【spring boot】SpringBoot初学(1) - Hello World
前言 此文只是记录自己简单学习spring boot的笔记.所以,文章很多只是初步理解,可能存在严重错误. 一.Spring boot的初步理解 1.spring boot的目标 (摘自:spring ...
- Spark学习之路 (十二)SparkCore的调优之资源调优[转]
概述 在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如 ...
- cf 989C
构造一个网格图使得四种类型的联通分量分别有a,b,c,d 看图就知道应该如何去构造了 int gird[maxn][maxn]; int main(){ int a[4]; for(int i=0;i ...
- Beego :布局页面
1:页面布局 一个html页面由:head部分,body部分,内部css,内部js,外联css,外联的js这几部分组成.因此,一个布局文件也就需要针对这些进行拆分. 2> 新建一个lay ...
- 牛客寒假6-F十字阵列
链接:https://ac.nowcoder.com/acm/problem/201986来源:牛客网 题目描述 小 Q 新学会了一种魔法,可以对一个 N行M列 的网格上的敌人造成伤害 第 i 次使用 ...
- Web APIs---2. DOM(1)
1 DOM简介 1.1 定义 DOM就是文档对象模型,是W3C组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口.W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容 ...
- Oracle 中关于 Group By 子句与多行函数嵌套搭配使用的注意事项
目录 你需要知道的 啥叫单行函数 啥叫多行函数 如何理解这个概念 Group by 子句使用规则 看一道 071 考题 你需要知道的 提到 Group by 子句,你需要先理解一个东西:函数的分类.提 ...
- java学习笔记之IO编程—目录和文件的拷贝
进行文件或目录的拷贝时,要先判断处理对象是文件还是目录,如果是文件则直接拷贝,如果是目录还需要拷贝它的子目录及其文件,这就需要递归处理了 import java.io.*; class FileUti ...
- Coxeter积分计算
\begin{align*}&\int_0^{\frac{\pi}{3}}{\arccos \left( \frac{1-\cos x}{\text{2}\cos x} \right) dx} ...
- 手动运行jar包,指定配置文件
打包程序 mvn package cd target 指定参数运行 java -jar spring-boot-demo-0.0.1-SNAPSHOT.jar --spring.profile.act ...