Codeforces 1251D Salary Changing
2024-09-04 06:48:36
D. Salary Changing
大意: 有n个变量, 每个变量有一个取值区间, 要求给这n个变量赋值, 使得n个变量的和不超过S且中位数尽量大(n一定为奇数)
二分答案, 中位数大于等于mid就是问能不能有(n+1)/2个变量的值大于等于mid, 排序贪心就完事了.
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long i64;
const int maxn = 200002;
struct interval{
int l, r;
bool operator < (const interval &B)const{
return l < B.l;
}
}E[maxn];
bool ok(int target, int n, i64 S){
i64 cost = 0;
int cnt = 0;
for(int i=n;i>=1;--i){
if(cnt*2<n&&E[i].r>=target){
if(E[i].l>=target)cost += E[i].l;
else cost += target;
cnt++;
}else{
cost += E[i].l;
}
}
return cost<=S && cnt*2>n;
}
void work(){
i64 S;
int n;
scanf("%d%lld", &n, &S);
for(int i=1;i<=n;++i){
scanf("%d%d", &E[i].l, &E[i].r);
}
sort(E+1, E+n+1);
int L = E[n/2+1].l;
int R = 1000000000;
while(L<=R){
int mid = (L+R)>>1;
if(ok(mid, n, S))L = mid + 1;
else R = mid - 1;
}
printf("%d\n", L-1);
}
int main(){
int t;scanf("%d", &t);
while(t--){
work();
}
return 0;
}
最新文章
- iOS 开发技术牛人博客
- 转:深入浅出UML类图(具体到代码层次)
- 小伙伴们惊呆了!10行 JavaScript 实现文本编辑器
- (原创)学习MCU的感悟_初级(MCU,经验)
- ubuntu Linux 测试PHP却提示下载文件的解决办法
- javascript面向对象分层思维
- Dockerfile 指令
- 由css属性:vertial-align想到的。。
- JVM启动参数手册——JVM之八
- 关于MyEclipse不停报错multiple problems have occurred 或者是内存不足 的解决办法
- 主要排序算法的Java实现
- spawn-fcgi运行fcgiwrap
- 精读《V8 引擎 Lazy Parsing》
- vscode-Live Server的使用心得
- 「HAOI2018」染色 解题报告
- 洛谷 P3899 [谈笑风生]
- sql语句,加引号和不加引号的区别
- 表单验证——JqueryValidator、BootstrapValidator
- Intel DAAL AI加速 ——传统决策树和随机森林
- [leetcode tree]96. Unique Binary Search Trees