CodeForces - 363D --二分和贪心
题意:给定n个学生,其中每个学生都有各自的私己钱,并且自己的私己钱只能用在自己买自行车,不能给别人。
给定m个自行车,每个自行车都有一个价格。
给定公有财产a。
然后求出这些学生能买自行车的最大数量,并且求当买下最大自行车数量时,总体花费私己钱的最少的钱。
我先来说以下二分搜索模板:
//右值点不能取到的情况
int binary_search(vector<int>& nums,int left,int right, int target) {
//坑点(1)right究竟能不能取到的问题,这里是不能取到的情况
int i = left;
int j= right;
while(i<j){
int mid = i+(j-i)/; //坑点(2)这里尽量这么写,因为如果写成(i+j)/2则有溢出的风险
if(nums[mid]>=target) //坑点(3)这个地方大于还是大于等于要依据情况而定
j = mid; //坑点(4)因为右值点反正不能取到,所以j就可以等于mid
else
i = mid+; //坑点(5)
}
return i;
} //右值点能取到的情况
int searchInsert(vector<int>& nums,int left,int right, int target) {
int i = left;
int j= right;
while(i<=j ){
int mid = i+(j-i)/;
if(nums[mid]>=target)
j = mid-;
else
i = mid+;
}
return i;
} 原文:https://blog.csdn.net/haolexiao/article/details/53541837
版权声明:本文为博主原创文章,转载请附上博文链接!
明显是用二分和贪心的方法来实现的,我的代码实现如下:
。。。。。。(我做了好长时间,才做出来的,是用了二分模板一,就是右边点不能取得情况)
代码实现如下:
import java.util.Arrays;
import java.util.Scanner; public class Main
{
static final int MAX = 100005;
static int N[] = new int[MAX];
static int M[] = new int[MAX];
static int n,m,a;
public static void main(String []args)
{
Scanner cin = new Scanner(System.in);
n = cin.nextInt();
m = cin.nextInt();
a = cin.nextInt();
for(int i = 0; i < n; i++)
{
N[i] = cin.nextInt();
}
for(int i = 0; i < m; i++)
{
M[i] = cin.nextInt();
}
Arrays.sort(N, 0,n);
Arrays.sort(M, 0,m);
//第一步,先找出能最多租的自行车数量,用变量real保存
int real = 0;
int left = 0;
int right = Math.min(n, m)+1;//这个1不能省,省了就错了,我就是被坑在这里一天。。。。。。
while(left < right)
{
int mid = left+(right-left)/2;
//检查当车辆为mid时,能否买得起。
if(check(mid))
{
real = mid;
left = mid+1;
}
else
{
right = mid;
}
//System.out.println(real);
}
if(real == 0)
{
System.out.println(0 + " " + 0);
return;
}
System.out.print(real + " ");
long sum = 0;
for(int i = 0; i < real; i++)
{
sum += M[i];
}
if(sum <= a)
{
System.out.print(0);
}
else
{
System.out.print((sum-a));
}
}
static boolean check(int K)
{
//最多钱的K个学生买最低价的K辆自行车
long sum = 0;
for(int i = 0; i < K; i++)
{
long result = M[i]-N[n-K+i];
if(result > 0)
{
sum += result;
}
}
if(sum <= a)
{
return true;
}
return false;
}
}
CodeForces - 363D --二分和贪心的更多相关文章
- codeforces 704B - Ant Man 贪心
codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...
- 【BZOJ1816】[CQOI2010]扑克牌(二分,贪心)
[BZOJ1816][CQOI2010]扑克牌(二分,贪心) 题面 BZOJ 题解 看了一眼这题,怎么这么眼熟?woc,原来\(xzy\)的题目是搬的这道啊... 行,反正我考的时候也切了,这数据范围 ...
- Luogu 1084 NOIP2012 疫情控制 (二分,贪心,倍增)
Luogu 1084 NOIP2012 疫情控制 (二分,贪心,倍增) Description H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树, 1 号城市是首都, 也是 ...
- hdu 4004 (二分加贪心) 青蛙过河
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4004 题目意思是青蛙要过河,现在给你河的宽度,河中石头的个数(青蛙要从石头上跳过河,这些石头都是在垂 ...
- CodeForces - 50A Domino piling (贪心+递归)
CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...
- BZOJ_2196_[Usaco2011 Mar]Brownie Slicing_二分答案+贪心
BZOJ_2196_[Usaco2011 Mar]Brownie Slicing_二分答案+贪心 Description Bessie烘焙了一块巧克力蛋糕.这块蛋糕是由R*C(1 <= R,C ...
- 洛谷3933 Chtholly Nota Seniorious 二分答案+贪心
题目链接 题意 给你一个N*M的矩阵 (N,M <=2000) 把他分成两部分 使两部分的极差较大的一个最小 求这个最小值.然后分矩阵的要求是:每个部分内部的方块之间,可以通过上下左右相互到 ...
- CodeForces 363D 【二分+贪心】
思路: 一开始是没有办法贪心的,但是答案是可以二分的,因为窝能买k辆车的话,窝就一定能买k-1辆车:而且我最好就是拿手上钱较多的那些人去买价格便宜的车,这样肯定是能买到最多的车,而且花的少,因为对于要 ...
- Codeforces 1039D You Are Given a Tree [根号分治,整体二分,贪心]
洛谷 Codeforces 根号分治真是妙啊. 思路 考虑对于单独的一个\(k\)如何计算答案. 与"赛道修建"非常相似,但那题要求边,这题要求点,所以更加简单. 在每一个点贪心地 ...
随机推荐
- Linux3.10.0块IO子系统流程(0)-- 块IO子系统概述
前言:这个系列主要是记录自己学习Linux块IO子系统的过程,其中代码分析皆基于Linux3.10.0版本,如有描述错误或不妥之处,敬请指出! 参考书籍:存储技术原理分析--基于Linux 2.6内核 ...
- Vue2.0 v-for 中 :key 到底有什么用?
要解释 key 的作用,不得不先介绍一下虚拟 DOM 的 Diff 算法了. vue 和 react 的虚拟 DOM 的Diff算法大致相同,其核心是基于两个简单的假设: 1.两个相同的组件产生类似的 ...
- ZBX_NOTSUPPORTED: Cannot obtain filesystem information: [13] Permission denied
zabbix有默认两条自动发现规则,其中一条是自动发现已挂载文件系统,但笔者的三个挂载文件系统中两个监控成功了,一个失败 agentd端挂载情况: 仔细研究sdb1的挂载点,发现它是挂载在xiami用 ...
- SharePoint开启错误提示
1,打开80下面的Web.config文件2,CallStack="true" 和 <customErrors mode="Off" /> < ...
- .net ML机器学习中遇见错误记录
避免入坑: 1.错误提示 numClasses must be at least 2 大概是训练模型的数据分类必须是两种,如下错误: 正确数据集如下:
- select默认选中
- 关于php
public private protected 修饰词 public: 公有类型 在子类中可以通过self::var调用public方法或属性,parent::method调用父类方法 在实例中可以 ...
- java项目打包成可运行的jar,main方法带参数
转载 原文地址:http://www.cnblogs.com/neillee/p/6063808.html#commentform 将 java 项目打包成可运行的 jar 包(main 函数带参数) ...
- DRF之视图类(mixin)源码解析
同样的增删改查操作,如果我们还像之前序列化组件那样做,代码重复率过多,所以我们用视图表示: 具体源码实现:首先定义一个视图类,然后根据mixin点进去有五个封装好的方法,这五个方法共有的属性就是都需 ...
- apache+jk+tomcat+ssl的https改造
项目背景 公司项目要进行https的改造,目前在测试环境搭建了一下,参考了网上的例子(http://blog.csdn.net/whumr1/article/details/7804992) 这里把主 ...