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,二分!感谢队友出思路!的更多相关文章

  1. Codeforces Round #211 (Div. 2) D题(二分,贪心)解题报告

    ---恢复内容开始--- 题目地址 简要题意: n个小伙子一起去买自行车,他们有每个人都带了一些钱,并且有公有的一笔梦想启动资金,可以分配给任何小伙子任何数值,当然分配权在我们的手中.现在给出m辆自行 ...

  2. Codeforces Round #211 (Div. 2)

    难得一次比赛能够自己成功A掉四个题: A题:水题,模拟一下就行: #include <iostream> #include <cstdio> using namespace s ...

  3. 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 ...

  4. Codeforces Round #353 (Div. 2) D. Tree Construction (二分,stl_set)

    题目链接:http://codeforces.com/problemset/problem/675/D 给你一个如题的二叉树,让你求出每个节点的父节点是多少. 用set来存储每个数,遍历到a[i]的时 ...

  5. Codeforces Round #352 (Div. 2) D. Robin Hood (二分答案)

    题目链接:http://codeforces.com/contest/672/problem/D 有n个人,k个操作,每个人有a[i]个物品,每次操作把最富的人那里拿一个物品给最穷的人,问你最后贫富差 ...

  6. 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 ...

  7. 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 ...

  8. 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 ...

  9. Codeforces Round #262 (Div. 2) 460C. Present(二分)

    题目链接:http://codeforces.com/problemset/problem/460/C C. Present time limit per test 2 seconds memory ...

随机推荐

  1. iOS中数据类型转换--遇到则记录

    1.NSString转NSNumber 使用情景:CoreData存储数据,其中一个为价格,CoreData里面定义为float 用文本输入框得到的数据类型是NSString,将NSString转换成 ...

  2. string类常用方法3

  3. 155 Min Stack 最小栈

    设计一个支持 push,pop,top 操作,并能在常量时间内检索最小元素的栈.    push(x) -- 将元素x推入栈中.    pop() -- 删除栈顶的元素.    top() -- 获取 ...

  4. Nginx重写规则

    Nginx的重写规则,依赖于pcre库(perl compatible regular expression).所以在安装的时候一定要让nginx支持这个功能,以及安装pcre-devel,prce. ...

  5. Backbone.js之Todo源码浅析

    相信每个接触了解过backbone的人都知道todo,网上的关于它的分析教程也都分析乱了.但是,知识只有自己学习领悟才是自己的,话不多说,正文开始. 在分析todo的源码之前,首先我们要知道todo具 ...

  6. laravel学习笔记(三)

    模型传值 路由: Route::get('/posts/{post}','\App\Http\Controllers\PostController@show'); 方法: public functio ...

  7. Qt中为QPushButton添加背景图片

    有2种方式,一种是在代码中设置,另外一种是直接在Qt Creator中直接设置,下面是第二种 参考: http://doc.qt.io/qt-4.8/stylesheet-examples.html ...

  8. 我的关于phoneGap的安装及测试。

    一.PhoneGap简介 PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台.它使开发者能够利用 iPhone,Android,Palm,S ...

  9. vue 模块 props

    inbody.vue <template> <div> <Breadcrumb :style="{margin: '24px 0'}"> < ...

  10. OpenCV2:第九章 图像比较

    一.简介 图像相似度主要是对两幅图像内容的相似程度进行打分,根据分数的高低来判断图像内容的相似程度. 常见的图像比较有两种方法:峰值信噪比PSNR和结构相似性SSIM 二.峰值信噪比PSNR(Peak ...