题目: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 --二分和贪心的更多相关文章

  1. codeforces 704B - Ant Man 贪心

    codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...

  2. 【BZOJ1816】[CQOI2010]扑克牌(二分,贪心)

    [BZOJ1816][CQOI2010]扑克牌(二分,贪心) 题面 BZOJ 题解 看了一眼这题,怎么这么眼熟?woc,原来\(xzy\)的题目是搬的这道啊... 行,反正我考的时候也切了,这数据范围 ...

  3. Luogu 1084 NOIP2012 疫情控制 (二分,贪心,倍增)

    Luogu 1084 NOIP2012 疫情控制 (二分,贪心,倍增) Description H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树, 1 号城市是首都, 也是 ...

  4. hdu 4004 (二分加贪心) 青蛙过河

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4004 题目意思是青蛙要过河,现在给你河的宽度,河中石头的个数(青蛙要从石头上跳过河,这些石头都是在垂 ...

  5. CodeForces - 50A Domino piling (贪心+递归)

    CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...

  6. BZOJ_2196_[Usaco2011 Mar]Brownie Slicing_二分答案+贪心

    BZOJ_2196_[Usaco2011 Mar]Brownie Slicing_二分答案+贪心 Description Bessie烘焙了一块巧克力蛋糕.这块蛋糕是由R*C(1 <= R,C ...

  7. 洛谷3933 Chtholly Nota Seniorious 二分答案+贪心

    题目链接 题意 给你一个N*M的矩阵 (N,M <=2000)  把他分成两部分 使两部分的极差较大的一个最小  求这个最小值.然后分矩阵的要求是:每个部分内部的方块之间,可以通过上下左右相互到 ...

  8. CodeForces 363D 【二分+贪心】

    思路: 一开始是没有办法贪心的,但是答案是可以二分的,因为窝能买k辆车的话,窝就一定能买k-1辆车:而且我最好就是拿手上钱较多的那些人去买价格便宜的车,这样肯定是能买到最多的车,而且花的少,因为对于要 ...

  9. Codeforces 1039D You Are Given a Tree [根号分治,整体二分,贪心]

    洛谷 Codeforces 根号分治真是妙啊. 思路 考虑对于单独的一个\(k\)如何计算答案. 与"赛道修建"非常相似,但那题要求边,这题要求点,所以更加简单. 在每一个点贪心地 ...

随机推荐

  1. J2EE [web] 403.500.404页面配置

    如果想让系统在出错后,看到自定义的错误提示页面,而不是满屏错误原因以及代码. 1.web.xml中 <error-page> <error-code>403</error ...

  2. Web开发——HTML基础(HTML表单/下拉列表/多行输入)

    参考: 参考:http://www.w3school.com.cn/html/html_forms.asp 目录: 1.<form> 元素 1.1 <input> 元素(输入属 ...

  3. [redis] redis cli的学习记录

    文档: https://redis.io/topics/rediscli help命令: The command can be used in two forms: . help @<categ ...

  4. 分析Hello2代码

    代码如下String username = request.getParameter("username"); if (username != null && us ...

  5. Xmodem协议简介

    1.      Xmodem协议 1.1.    简介 在上一章中,BootLoader和APP在串口下的升级其实都用到了一种文件传输协议,即Xmodem协议,该协议因其简单,易实现和使用的特点在很多 ...

  6. Ethzasl MSF源码阅读(3):MSF_Core和PoseMeasurement

    1.MSF_Core的三个函数:ProcessIMU.ProcessExternallyPropagatedState和AddMeasurement MSF_Core维护了状态队列和观测值队列,这里需 ...

  7. HBase笔记6 过滤器

    过滤器 过滤器是GET或者SCAN时过滤结果用的,相当于SQL的where语句 HBase中的过滤器创建后会被序列化,然后分发到各个region server中,region server会还原过滤器 ...

  8. Unicode编码学习

    unicode基础知识 简单来说,** unicode 是字符集,utf-8,utf-16,utf-32是编码规则.** unicode 字符集: ttps://unicode-table.com/ ...

  9. Oracle中如何使用REGEXP_SUBSTR函数动态截取字符串

    REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr ...

  10. 擦他丫的,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了!

    擦 ,今天在Django项目中引用静态文件jQuery.js 就是引入报错,终于找到原因了! 问题在于我使用的谷歌浏览器,默认使用了缓存,导致每次访问同一个url时,都返回的是缓存里面的东西.通过谷歌 ...