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\)如何计算答案. 与"赛道修建"非常相似,但那题要求边,这题要求点,所以更加简单. 在每一个点贪心地 ...
随机推荐
- [redis] redis cli的学习记录
文档: https://redis.io/topics/rediscli help命令: The command can be used in two forms: . help @<categ ...
- AndrewNG Deep learning课程笔记 - CNN
参考, An Intuitive Explanation of Convolutional Neural Networks http://www.hackcv.com/index.php/archiv ...
- ionic3.x版本开发问题记录---使用Image Resizer打包报错问题
按照官方文档安装和使用,最后在打包的时候报错 /platforms/android/src/info/protonet/imageresizer/ImageResizer.java:12: error ...
- java框架之SpringCloud(7)-Config分布式配置中心
前言 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中标会出现大量的服务.由于每个服务都需要必要的配置信息才能运行,所以一套集中式的.动 ...
- 下载工具axel 和 mwget
axel, yum安装或者apt-get安装 但有时axel不行,需要上wget,但单线程的太慢,需要安装mwget.apt-get -y install intltoolwget http://ja ...
- 52.JQ---向上滚动显示,向下滚动隐藏
js: var windowTop = 0;$(window).scroll(function() { var scrolls = $(this).scrollTop(); if(scrolls &l ...
- 如何通过代码审计挖掘REDos漏洞
写这篇文章的目的一是由于目前网上关于java代码审计的资料实在是太少了,本人作为一个java代码审计的新手,深知学习java代码审计的难受之处,所以将自己学习过程中挖掘的一些漏洞写成博客发出来希望可以 ...
- js不需要知道图片宽高的懒加载方法(经过实际测试,不加宽高仍然是无法正常加载的,设置height:auto,height:100%,仍然显示高度为0)
js不需要知道图片宽高的懒加载方法 懒加载是如何实现的? - 简书https://www.jianshu.com/p/e86c61468285找到一个不需要知道图片宽高的懒加载方法了(经过实际测试,不 ...
- week_one-python基础 列表 增删改查
# Author:larlly #列表增删改查#定义列表name = ["wo","ni","ta","wo"] #定义 ...
- 论文笔记【一】Chinese NER Using Lattice LSTM
论文:Chinese NER Using Lattice LSTM 论文链接:https://arxiv.org/abs/1805.02023 论文作者:Yue Zhang∗and Jie Yang∗ ...