Codeforces Round #211 (Div. 2) D题(二分,贪心)解题报告
---恢复内容开始---
简要题意:
n个小伙子一起去买自行车,他们有每个人都带了一些钱,并且有公有的一笔梦想启动资金,可以分配给任何小伙子任何数值,当然分配权在我们的手中。现在给出m辆自行车的价格,需要你求出最多可以让多少个小伙子有属于自己的自行车(即自行车不可以两个人共有,只能一个人有),和在满足之前这个条件的情况下,通过最省私人钱的分配,最少需消耗多少私人的资金。
思路分析:
首先考虑,如何分配才是使其中x个小伙子能有自己车的最好分配方法。不难想到,将n个小伙子按个人资金从大到小排序,将m辆自行车的价格从小到大排序,使前x个有钱的小伙子依次去买第x便宜的车,第x-1便宜的车……最便宜的车。这就是最可行的分配方式,而如果对于x,这个都无法满足,那么就一定不存在可以使x个小伙子有自己的车的办法。由此,可以考虑二分查找最后一个满足这种情况的x。
参考代码:
#include<stdio.h>
#include<bits/stdc++.h>
#include <iostream>
using namespace std;
typedef long long ll;
int ren[],price[];
ll an;
int n,m,a,mid,l,r;
bool check(int k)//检验函数,判断k个是否可行
{
int dui = n - k;//对应的下标
int tmp = a;
for(int i = ;i < k;++i,dui++)
{
if(price[i] <= ren[dui]){
continue;
}
else if((price[i] > ren[dui])&&(price[i] <= ren[dui]+tmp)){
tmp -= (price[i]-ren[dui]);
}
else
{
return false;
}
}
return true;
}
int main()
{
int i;
scanf("%d%d%d",&n,&m,&a);
for(i=;i<n;i++)
{
scanf("%d",&ren[i]);
}
for(i=;i<m;i++)
{
scanf("%d",&price[i]);
}
sort(ren,ren+n);sort(price,price+m);
l=;r=min(n,m);
while(l<=r)//二分查找
{
mid=(l+r)/;
if(check(mid))
{
l=mid+;
}
else
r=mid-;
}
mid=l-;
an=;
for(i=;i<mid;i++)
{
an+=price[i];
}
an=max(0ll,an-a);
printf("%d %I64d\n",mid,an);
return ;
}
Codeforces Round #211 (Div. 2) D题(二分,贪心)解题报告的更多相关文章
- Codeforces Round #378 (Div. 2) D题(data structure)解题报告
题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...
- Codeforces Round #612 (Div. 2) 前四题题解
这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...
- Codeforces Round #713 (Div. 3)AB题
Codeforces Round #713 (Div. 3) Editorial 记录一下自己写的前二题本人比较菜 A. Spy Detected! You are given an array a ...
- Codeforces Round #552 (Div. 3) A题
题目网址:http://codeforces.com/contest/1154/problem/ 题目意思:就是给你四个数,这四个数是a+b,a+c,b+c,a+b+c,次序未知要反求出a,b,c,d ...
- Codeforces Round #211 (Div. 2)
难得一次比赛能够自己成功A掉四个题: A题:水题,模拟一下就行: #include <iostream> #include <cstdio> using namespace s ...
- Codeforces Round #412 Div. 2 补题 D. Dynamic Problem Scoring
D. Dynamic Problem Scoring time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- Codeforces Round #257 (Div. 2) E题:Jzzhu and Apples 模拟
E. Jzzhu and Apples time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #211 (Div. 2)-D. Renting Bikes,二分!感谢队友出思路!
D. Renting Bikes 读懂题后一开始和队友都以为是贪心.可是贪心又怎么贪呢..我们无法确定到底能买多少车但肯定是最便宜的前x辆.除了公共预算每个人的钱只能自己用,也无法确定每个人买哪一辆车 ...
- Codeforces Round #402 (Div. 2) D题 【字符串二分答案+暴力】
D. String Game Little Nastya has a hobby, she likes to remove some letters from word, to obtain anot ...
随机推荐
- Codeforces Round #389 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 3) D. Santa Claus and a Palindrome STL
D. Santa Claus and a Palindrome time limit per test 2 seconds memory limit per test 256 megabytes in ...
- ASP.NET MVC: Razor中的@:和语法
本文将讨论新版Razor里视图引擎中支持的两个有用的语法功能:@:和<text>语法. 用Razor实现流畅编程 ASP.NET MVC 3配有一个新的名为“Razor”的视图引擎选项(除 ...
- Java项目JUnit简单使用
前面自己写了一个计算器,准备用在项目里 http://www.cnblogs.com/blog5277/p/5707304.html 由于项目是用户计算跟钱有关的,所以这可不敢出BUG 于是就用了JU ...
- Centos中tomcat7指定jdk
服务器上默认的jdk是1.8的,但是我想我的tomcat指定一个自定义的jdk怎么办呢,莫急,待老夫慢慢道来. 1.需要有一个除默认外的jdk的安装包(不用配置任何环境变量),如下图: 2.进入tom ...
- pyqt官方示例
文件夹 PATH 列表 卷序列号为 00000058 F027:7BEC C:. ├─activeqt │ └─webbrowser │ ├─icons │ └─pycache ├─animation ...
- iStylePDF c#集成开发示例
iStylePDF安装包自带了ActiveX控件,下载安装包安装之后就可以使用,如果没有安装包请到360软件管家或者腾讯软件管家搜索下载.C#的Form中集成ActiveX控件还是非常简单的,选择添加 ...
- 【转】Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)
下面开始用简单但典型的客户端和服务器端程序说明如何进行网络编程.这一小节讲的是客户端,一个用来连接并读取服务器发送来的时间的客户端. 这里涉及到了编写代码,因此要 搭建unix网络编程环境 unix系 ...
- ajax 跨域访问
后台方法添加 HttpServletResponse response=ServletActionContext.getResponse(); response.addHeader("Acc ...
- Distributed Databases and Data Mining: Class timetable
Course textbooks Text 1: M. T. Oszu and P. Valduriez, Principles of Distributed Database Systems, 2n ...
- 解决Mac下MX4手机无法连接adb问题之解决方案
一般的android连接mac 很方便不用安装驱动就可以啦,可是不知道为什么特殊情况下有的android手机(小米2,华为等)就是连接不上,下来就说说特殊情况下如何连接. 使用USB连接安卓手机后可以 ...