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 ...
随机推荐
- Java 修改编码格式的几种方式
1.工作空间 workspase Window→Preferences→General→Workspace→Text file encoding→other→UTF-8 2.项目编码格式 右键项目名→ ...
- ASP.NET MVC5的一个轻量级的框架学习的第一天
第二步第三部 这是第一天的小试成功,怪自己太笨了,一个错排查好久,还好有源码看着了解,后续还得多努力,
- Java-学完一个月总结(javaSe学习路线)
JavaSe的一个月 第一周 0410 基本数据类型:数据类型的转换:运算符:导入删除项目0411 分支结构if else:switch case ;while0412 do while ;for / ...
- 如何查看安装的java是32位的,还是64位的
命令 java -d32 -version 或者 java -d64 -version
- 【HEVC帧间预测论文】P1.5 Fast Coding Unit Size Selection for HEVC based on Bayesian Decision Rule
Fast Coding Unit Size Selection for HEVC based on Bayesian Decision Rule <HEVC标准介绍.HEVC帧间预测论文笔记&g ...
- c# sqlserver连接字符串
odbc: string cnnstring = @"Driver={SQL Server Native Client 11.0};Initial Catalog = sxquadb;ser ...
- 接口自动化- 基于 Python
准备工作 这部分其实在谷歌或者百度上搜索下就可以完成的,可是我就是想再啰嗦一遍,说不定有比我更懒的同学呢哈哈~ 第一步 Python的安装配置 打开官网: https://www.python.org ...
- 洛谷 P1030 求先序排列
题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入输出格式 输入格式: 2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序 ...
- 语音行业技术领先者Nuance诚招ASR/NLP研发工程师和软件工程师
Nuance is a leading provider of voice and language solutions for businesses and consumers around the ...
- centos下升级python
1. wget http://www.python.org/ftp/python/3.3.0/Python-3.3.0.tgz 2.解压之后 tar -xzvf Python-3.3.0.tgz 3 ...