Codeforces Round #211 (Div. 2)-D. Renting Bikes,二分!感谢队友出思路!
读懂题后一开始和队友都以为是贪心。可是贪心又怎么贪呢。。我们无法确定到底能买多少车但肯定是最便宜的前x辆。除了公共预算每个人的钱只能自己用,也无法确定每个人买哪一辆车。。比赛快结束时我去看最后一题,队友还在 想,突然他想到了用二分的思路,然后验证了一下是正确的,但时间不够了。今天回来就这道题都快写了两小时了。
题意:n个人,每个人自己有一定的钱,还有公共的预算。m辆自行车,每辆车有一定的价格。求最多能租几辆车并且用的私房钱的总数最少。
思路:结束后百度了一下果然是二分。二分能买多少辆车,然后看看是否符合条件,然后再取总私房钱花的最少的。
但这种二分题真的写起来很痛苦了,明明思路很清晰,就是边界问题或者各种细节问题处理起来相当费时间。
const int N=2e5+7;
int n,m;
ll ans,k,a[N],b[N];
ll fun(int x)
{
if(m<x) return 0;
ll sum=0,kk=k;//sum表示用的私房钱总数,kk表示剩余的预算;
for(int i=n; i>=1&&x>=1; i--,x--)
{
if(a[i]>=b[x]) sum+=b[x];//先用自己的钱垫,最后剩余的预算再补回来;
else
{
if(kk>0&&a[i]+kk>=b[x])
{
sum+=a[i];
kk-=b[x]-a[i];//用预算补;
}
else return 0;
}
}
if(kk<0||x>=1) return 0;
// printf("%I64d %I64d\n",sum,kk);
ans=sum-kk<=0?0:min(ans,sum-kk);
return 1;
}
int main()
{
while(~scanf("%d%d%I64d",&n,&m,&k))
{
for(int i=1; i<=n; i++) scanf("%I64d",&a[i]);
for(int i=1; i<=m; i++) scanf("%I64d",&b[i]);
sort(a+1,a+n+1);
sort(b+1,b+m+1);
if(a[n]+k<b[1])
{
printf("0 0\n");
continue;
}
ans=INF;
int l=1,r=n;
while(l<=r)
{
int mid=(l+r)/2;
// printf("%d\n",mid);
if(fun(mid)) l=mid+1;
else r=mid-1;
}
ans=INF;
ll t1=fun(l),t2=fun(r);
if(t1&&!t2) printf("%d %I64d\n",l,ans);
else printf("%d %I64d\n",r,ans);
}
return 0;
} //1 1 2
//1
//2 //******************************************
//***************** LYQ ***************
//***************** YES ***************
//*UserID: secrecy *
//*RunOJ: *
//*RunID: *
//*Submit time: *
//*Language: G++ *
//*Result: Accepted *
//*time: *
//*Memory: *
//*Length: *
//*School: NYIST *
//*Blog: http://blog.csdn.net/nyist_tc_lyq *
//*QQ: 1759421378 *
//*Tel: 13037635630 *
//*****************************************/
思路真的很清晰,可能是代码能力还是比较低,一上午就做了这一个题。。
Codeforces Round #211 (Div. 2)-D. Renting Bikes,二分!感谢队友出思路!的更多相关文章
- Codeforces Round #211 (Div. 2) D题(二分,贪心)解题报告
---恢复内容开始--- 题目地址 简要题意: n个小伙子一起去买自行车,他们有每个人都带了一些钱,并且有公有的一笔梦想启动资金,可以分配给任何小伙子任何数值,当然分配权在我们的手中.现在给出m辆自行 ...
- Codeforces Round #211 (Div. 2)
难得一次比赛能够自己成功A掉四个题: A题:水题,模拟一下就行: #include <iostream> #include <cstdio> using namespace s ...
- Codeforces Round #211 (Div. 2)B. Fence
B. Fence time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- Codeforces Round #353 (Div. 2) D. Tree Construction (二分,stl_set)
题目链接:http://codeforces.com/problemset/problem/675/D 给你一个如题的二叉树,让你求出每个节点的父节点是多少. 用set来存储每个数,遍历到a[i]的时 ...
- Codeforces Round #352 (Div. 2) D. Robin Hood (二分答案)
题目链接:http://codeforces.com/contest/672/problem/D 有n个人,k个操作,每个人有a[i]个物品,每次操作把最富的人那里拿一个物品给最穷的人,问你最后贫富差 ...
- Codeforces Round #334 (Div. 2) B. More Cowbell 二分
B. More Cowbell Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/604/probl ...
- Codeforces Round #172 (Div. 2) B. Nearest Fraction 二分
B. Nearest Fraction Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/281/p ...
- Codeforces Round #200 (Div. 1) C. Read Time 二分
C. Read Time Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/343/problem/C ...
- Codeforces Round #262 (Div. 2) 460C. Present(二分)
题目链接:http://codeforces.com/problemset/problem/460/C C. Present time limit per test 2 seconds memory ...
随机推荐
- 如何修改phpmyadmin上传文件大小限制
修改php配置文件,php.ini upload_max_filesize = 100M post_max_size = 100M 一般修改这2个就行了,然后重启wampserver 如果还不行,就执 ...
- [转]如何使用MFC和类型库创建自动化项目
本文转自:http://www.cnblogs.com/zhoug2020/archive/2012/04/01/2429064.html 摘要 本文详细介绍了如何自动化像Microsoft Offi ...
- P1979 华容道 spfa题解
题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...
- 关于ES6的Promise的使用深入理解
ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...
- 【学习笔记】深入理解js原型和闭包(17)——补this
本文对<深入理解js原型和闭包(10)——this>一篇进行补充,原文链接:https://www.cnblogs.com/lauzhishuai/p/10078307.html 原文中, ...
- iOS 动画(基于Lottie封装)
一般app中都会带有动画,而如果是一些复杂的动画,不但实现成本比较高,而且实现效果可能还不能达到UI想要的效果,于是我们可以借助lottie来完成我们想要的动画. lottie动画1.gif ...
- dataTables去掉搜索框和每页多少条框体,解决Cannot reinitialise DataTable问题
$('#example').DataTable({ searching:false, //去掉搜索框 bLengthChange:false,//去掉每页多少条框体 "language&qu ...
- 在windows上安装Jenkins---tomcat流
在windows上安装Jenkins有两种方式: (1)jar流 在命令行中运行:java -jar jenkins.war 浏览器访问 localhost:8080,创建初始管理员帐号即可. (2) ...
- (转)Spring的bean管理(注解方式)
http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...
- 植物大战僵尸游戏的开发(python)
装备东西: 搭建好python环境, 四张图片,(背景图片,炮弹图片,僵尸图片,豌豆图片),就ok了 没有安装pygame的需要进行安装 pip install pygame 参考视频 # 植物大 ...