二分题 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 ...
随机推荐
- laravel 解决 sql mode only_full_group_by
this is incompatible with sql_mode=only_full_group_by 先贴报错是这样的哦,sql 中使用到了 group by 然后这是mysql-5.7以上版本 ...
- MS SQLServer相关自动化程序的问题汇总 (SQLServer每天定时输出EXCEL或xml的格式的问题等 )
· MS SQLServer相关问题 1. 使用MS SQLServer每天定时输出EXCEL格式的文件,实现每天的Excel报表导出 2. 使用MS SQLServer每天定时输出xml格式的文件, ...
- python3运行时候报错集锦:读取文件报错
1.关于读取文件报错: 命令执行到cf.read(cfpath),出现如下报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa0 in po ...
- NetCore使用使用Scaffold-DbContext命令生成数据库表实体类
一.为了模拟项目,本处创建了一个NetCore的Web项目.打算在Models文件夹下生成数据库表的实体类. 二.在程序包管理控制台,输入“Scaffold-DbContext "Serve ...
- 获取url参数(jq 扩展包)
(function($){ $.extend({ urlGet:function(url) { var getUrl = url ? url.split("?") : window ...
- linux-mysql-主从同步
什么是二进制日志binlog:记录着mysql数据库中的一些写入性操作,比如一些增删改,但不包括查询!二进制日志有哪些功能:数据复制和数据恢复的功能 查看网络状态:netstat -natp查看mas ...
- 洛谷P3367 【模板】并查集 模板 找baba
链接https://www.luogu.org/problem/P3367 #include<bits/stdc++.h> using namespace std; ; int fa[ra ...
- sap gui中打断点,进入不了断点
1: 当abap development tool 打开时,会影响sap gui中的断点进入. 2: 需要sap gui和abap development tool 都关闭,重新进入sap gui打 ...
- Docker学习笔记三
4.Docker数据管理 4.1.数据卷 数据卷是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似与Linux的mount行为. 特性: 数据卷可以在容器之间共事和重用,容器间传递 ...
- Cannot read property 'resolve' of undefined
可能是node下载的有问题 推荐官网:https://nodejs.org/zh-cn/