2187. 猴子除草
来源:互联网 发布:闲鱼淘宝介入 编辑:程序博客网 时间:2024/04/28 02:17
题目描述
题目分析
这一道题明显就是用贪心。
我们只需要把当前最大工作量的草坪减去m,其他都减去1即可。
我们可以用堆来维护。
因为如果我们对于每一个数都减去1的话,那明显就会超时。
所以我们不用减,只需要把判断由原来的
于是问题完美解决。
代码
#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;int a[410000];int b[410000],sum=0;int cmp(const void *xx,const void *yy){ int n1=*(int *)xx; int n2=*(int *)yy; if(n1<n2) return 1; else return -1;}void up(int x){ while(b[x]>b[x/2]&&x/2>0) { int t=b[x]; b[x]=b[x/2];b[x/2]=t; x/=2; }}void down(int x){ while((b[x]<b[x*2]&&x*2<=sum)||(b[x]<b[x*2+1]&&x*2+1<=sum)) { if(x*2==sum||b[x*2]>b[x*2+1]) { int t=b[x]; b[x]=b[x*2];b[x*2]=t; x*=2; } else { int t=b[x]; b[x]=b[x*2+1];b[x*2+1]=t; x=x*2+1; } }}void insert(int x){ sum++; b[sum]=x; up(sum);}int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } int ans=0; for(int i=1;i<=n;i++) { insert(a[i]); } bool bk=true; for(int i=1;i<=n;i++) { if(a[i]>0) { bk=false; break; } } if(bk==true) { printf("0\n"); return 0; } while(1) { ans++; b[1]-=m-1; down(1); if(b[1]<=ans) break; b[1]--; } printf("%d\n",ans); return 0;}
阅读全文
0 0
- 2187. 猴子除草
- 除草记
- 开张除草
- 【codechef除草】
- 今天来blog除草!!
- Hi系列之,除草
- 2011除草-rbuttondown调用
- 要除草了
- 【除草】一些题目
- 【除草】一些稍难题
- 【除草】Hackerrank思考题
- 除草(3.30~4.4)
- 除草(4.6~4.11)
- [论文除草]记录思路
- 猴子
- 猴子
- 猴子
- 猴子
- JavaWeb学习之Servlet
- JDBC工具类使用C3P0连接池
- 如何学好python web开发
- Focal Loss论文阅读笔记
- Kotlin 字段和属性
- 2187. 猴子除草
- 反转字符串的一些常见方法
- 解压版mysql卸载
- 用For循环创建菱形到空心菱形
- spring cloud feign
- 【贪心】BZOJ3410(Usaco2009 Dec)[Selfish Grazing 自私的食草者]题解
- EL怎么从cookie里取值
- gcd小规律 [Cqoi2014]数三角形
- HDFS工作原理