ZOJ 4067 Books (2018icpc青岛J) (贪心)
题意
给你一个长度为n的数组,代表每一个物品的价格。你有一个初始钱数\(x\),采用以下方法贪心:
从\(1\)到\(n\)扫一遍,如果\(x\)不比\(a[i]\)小,就买下它,买不起就跳过。
给你最终买的物品数量m,求\(x\)的最大值。
思路
我队的贪心菜的一笔,果然我也有很大的责任。。
首先如果最后全部买完,那么刚开始的钱一定是无穷多的。
我们先假设数组里没有0,那么通过题意中的贪心方法,最后买的一定是前m个。
证明:
当\(m=0\)的时候,显然成立。
假设当\(m=i\)的时候成立,即已经连续买了前\(i\)个。
买第\(i+1\)个的时候,如果不买\(a[i+1]\),而买了\(a[j]\),\(j>i+1\):
①当\(a[i+1]\leq a[j]\)时,由于题意中的贪心,如果买了\(a[j]\),对于\(j>i+1\),且\(a[j]\geq a[i+1]\)时,\(a[i+1]\)是必买的,所以不成立
②当\(a[i+1]>a[j]\)时,由于两个位置对m的贡献都为1,为使答案最大,还是要选最大的\(a[i+1]\)
综上所述,此时要买\(a[i+1]\)
再综上所述,最后买的一定是前m个
所以,没有0的时候,我们直接买前m个即可
当数组里是有0时,因为永远可以买0,所以要从m里减去0的个数,然后对剩下的数做上述算法
当然如果0的个数本身就超过\(m\),就是\(impossible\)的。
代码
注释提供了一些假算法的插点
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<deque>
#include<set>
#include<vector>
#include<map>
#include<functional>
#define fst first
#define sc second
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define lson l,mid,root<<1
#define rson mid+1,r,root<<1|1
#define lc root<<1
#define rc root<<1|1
#define lowbit(x) ((x)&(-x))
using namespace std;
typedef double db;
typedef long double ldb;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PI;
typedef pair<ll,ll> PLL;
const db eps = 1e-6;
const int mod = 1e9+7;
const int maxn = 3e6+100;
const int maxm = 2e6+100;
const int inf = 0x3f3f3f3f;
const db pi = acos(-1.0);
int n,m;
ll a[maxn];
int cnt;
ll sum[maxn];
multiset<ll>s;
int main() {
int t;
scanf("%d", &t);
while(t--){
cnt=0;
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; i++){
scanf("%lld", &a[i]);
if(!a[i])cnt++;
}
if(n==m){
printf("Richman\n");continue;
}
if(cnt>m){
printf("Impossible\n");continue;
}
ll ans=0;
m-=cnt;
int p = 0;
int num=0;
for(int i = 1; i <= n&&num<m; i++){
if(a[i]){ans+=a[i];p=max(p,i);num++;}
}
//printf(" %d\n",p);
ll mi = 0x7f7f7f7f7f7f7f7f;
for(int i = p+1; i <= n; i++){
if(a[i])mi=min(mi,a[i]);
}
if(mi==0x7f7f7f7f7f7f7f7f){
printf("Richman\n");continue;
}
printf("%lld\n",mi-1+ans);
}
return 0;
}
/*
2
7 6
4 1 0 3 0 0 1
6 5
4 5 0 3 0 0
*/
ZOJ 4067 Books (2018icpc青岛J) (贪心)的更多相关文章
- ZOJ 4067 - Books - [贪心][2018 ACM-ICPC Asia Qingdao Regional Problem J]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4067 题意: 给出 $n$ 本书(编号 $1 \sim n$), ...
- 2018ICPC青岛现场赛 重现训练
先贴代码,以及简要题解. 和一个队友下午双排打了一下,队友光速签到,我签的J被嫌弃写得慢以及演员...然后我秒出了E了思路然而难以置信这么简单的思路当时才过了十几个,于是发现D.F不是太好做.最后交了 ...
- ZOJ Problem Set - 3829Known Notation(贪心)
ZOJ Problem Set - 3829Known Notation(贪心) 题目链接 题目大意:给你一个后缀表达式(仅仅有数字和符号),可是这个后缀表达式的空格不幸丢失,如今给你一个这种后缀表达 ...
- [ZOJ 4062][2018ICPC青岛站][Plants vs. Zombies]
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4062 题目大意:给一个大小为n的数组,数组编号从1到n,每一个元素的值代表 ...
- 【ZOJ 4067】Books
[链接] 我是链接,点我呀:) [题意] [题解] 统计a中0的个数cnt0 然后m减去cnt0 因为这cnt0个0是一定会取到的. 如果m==0了 那么直接找到数组中的最小值mi 输出mi-1就好 ...
- 2018ICPC青岛赛区J题
题目链接:http://acm.zju.edu.cn/onlinejudge/showRuns.do?contestId=1 这题真的坑,为什么要买0本书的时候,书架里面刚好有价格为0的时候输出&qu ...
- hdu 4070 福州赛区网络赛J 贪心 ***
优先发路程最长的 #include<cstdio> #include<iostream> #include<algorithm> #include<cstri ...
- ZOJ 4062 - Plants vs. Zombies - [二分+贪心][2018 ACM-ICPC Asia Qingdao Regional Problem E]
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4062 题意: 现在在一条 $x$ 轴上玩植物大战僵尸,有 $n$ ...
- 2018ICPC青岛 E - Plants vs. Zombies (二分+模拟)
ZOJ - 4062 题意:有n个植物排成一排,按顺序植物的编号是1-n,每个植物都有一个生长速率,有一个机器人,机器人可以走m步,每走一步,这个机器人就会浇一次水,浇一次水那个植物就会长 自身的生长 ...
随机推荐
- linux下配置vnc-server 和gnome-session
机器比较老,安装时间也十分久远,所以也不知道实验室系统当时是不是完全安装,最近需要使用vnc登录显示界面,结果问题就来了...没有安装vnc-server. (1)机器系统是rhel6.2的,所以就从 ...
- zookeeper作配置中心(存储支付信息)
zookeeper作配置中心(存储敏感信息) 前提:最近在项目中需要用到支付接口,支付宝或者微信支付,根据官方文档,需要配置一些诸如notify-url或者app-private-key等信息,这些信 ...
- Java中数组的使用
1.声明数组 1.1声明一维数组 声明一维数组有下列两种格式: 数组的元素类型 数组名字[ ]; 数组的元素类型[ ] 数组名字 1.2声明二维数组 声明二维数组有下列两种格式: 数组的 ...
- Netty快速入门(03)Java NIO 介绍-Buffer
NIO 介绍 NIO,可以说是New IO,也可以说是non-blocking IO,具体怎么解释都可以. NIO 1是在JSR51里面定义的,在JDK1.4中引入,因为BolckingIO不支持高并 ...
- Graph Transformer Networks 论文分享
论文地址:https://arxiv.org/abs/1911.06455 实现代码地址:https://github.com/ seongjunyun/Graph_Transformer_Netwo ...
- log日志拦截
简介 主要记录一下项目中的日志拦截和异常拦截,由于之前公司项目为单体项目,所使用的日志拦截较为简单,只是用拦截器进行前后对日志的拦截,异常拦截直接使用@ExceptionHandler,而现在公司接口 ...
- 田忌赛马 - dp
Here is a famous story in Chinese history. That was about 2300 years ago. General Tian Ji was a high ...
- 10.JavaSE之包机制
包机制: 为了更好的组织类,Java提供了包机制,用于区别类名的命名空间 包语句的语法格式为: package pkg1[ . pkg2[ . pkg3...]]; package com.duan. ...
- 9.Java三大版本以及JDK,JRE,JVM简单介绍
Write Once,Run Anywhere. JavaSE:标准版(桌面程序,控制台开发...),是Java的基础和核心. JavaME:嵌入式开发(手机,小家电...),现在基本不用已经过时. ...
- Photoshop 2020安装教程
首先来看看新增功能 [Photoshop 2020新增功能] 1.ipad和云文档 2.预设改进 3.新对象选择工具 4.转换行为一致 5.改进的属性面板 6.智能对到图层 7.增强的转换变形. 需要 ...