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. 如何修改phpmyadmin上传文件大小限制

    修改php配置文件,php.ini upload_max_filesize = 100M post_max_size = 100M 一般修改这2个就行了,然后重启wampserver 如果还不行,就执 ...

  2. [转]如何使用MFC和类型库创建自动化项目

    本文转自:http://www.cnblogs.com/zhoug2020/archive/2012/04/01/2429064.html 摘要 本文详细介绍了如何自动化像Microsoft Offi ...

  3. P1979 华容道 spfa题解

    题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...

  4. 关于ES6的Promise的使用深入理解

    ES6的promise对象研究 什么叫promise? Promise对象可以理解为一次执行的异步操作,使用promise对象之后可以使用一种链式调用的方式来组织代码:让代码更加的直观. 那我们为什么 ...

  5. 【学习笔记】深入理解js原型和闭包(17)——补this

    本文对<深入理解js原型和闭包(10)——this>一篇进行补充,原文链接:https://www.cnblogs.com/lauzhishuai/p/10078307.html 原文中, ...

  6. iOS 动画(基于Lottie封装)

    一般app中都会带有动画,而如果是一些复杂的动画,不但实现成本比较高,而且实现效果可能还不能达到UI想要的效果,于是我们可以借助lottie来完成我们想要的动画.   lottie动画1.gif   ...

  7. dataTables去掉搜索框和每页多少条框体,解决Cannot reinitialise DataTable问题

    $('#example').DataTable({ searching:false, //去掉搜索框 bLengthChange:false,//去掉每页多少条框体 "language&qu ...

  8. 在windows上安装Jenkins---tomcat流

    在windows上安装Jenkins有两种方式: (1)jar流 在命令行中运行:java -jar jenkins.war 浏览器访问 localhost:8080,创建初始管理员帐号即可. (2) ...

  9. (转)Spring的bean管理(注解方式)

    http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...

  10. 植物大战僵尸游戏的开发(python)

    装备东西: 搭建好python环境, 四张图片,(背景图片,炮弹图片,僵尸图片,豌豆图片),就ok了  没有安装pygame的需要进行安装  pip install pygame 参考视频 # 植物大 ...