题目链接:Plants vs. Zombies

题意:从1到n每个位置一棵植物,植物每浇水一次,增加ai高度。人的初始位置为0,人每次能往左或往右走一步,走到哪个位置就浇水一次。求m步走完后最低高度的植物最大高度为多少。

题解:明显二分答案的题目。check时从左往右遍历,贪心思路:把该位置满足同时给后面减少浇水次数,策略是该位置和后一个位置左右横跳,注意最后一个位置的时候,如果满足就不需要再跳过去。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 using namespace std;
 6
 7 const int N=1e5+10;
 8 typedef long long ll;
 9 ll a[N],d[N],n,m;
10
11 bool check(ll k){
12     for(ll i=1;i<=n;i++) d[i]=0;
13     ll cnt=m;
14     for(ll i=1;i<=n;i++){
15         if(cnt==0){
16             if(i==n&&d[i]>=k) return true;
17             return false;
18         }
19         cnt--;
20         d[i]+=a[i];
21         if(d[i]<k){
22             ll tmp=k-d[i];
23             ll c=tmp/a[i];
24             if(tmp%a[i]!=0) c++;
25             if(cnt>=2*c){
26                 cnt-=2*c;
27                 d[i]+=(a[i]*c);
28                 d[i+1]+=(a[i+1])*c;
29             }
30             else return false;
31         }
32     }
33     return true;
34 }
35
36 int main(){
37     int t;
38     scanf("%d",&t);
39
40     while(t--){
41         ll ans=0;
42         scanf("%lld%lld",&n,&m);
43         for(ll i=1;i<=n;i++){
44             scanf("%lld",&a[i]);
45         }
46         ll l=0,r=1e17+100;
47         while(l<=r){
48             ll mid=(l+r)/2;
49             if(check(mid)) ans=max(ans,mid),l=mid+1;
50             else r=mid-1;
51         }
52         printf("%lld\n",ans);
53     }
54
55     return 0;
56 }

View Code

转载于:https://www.cnblogs.com/ehanla/p/9974960.html

ZOJ 4062 Plants vs. Zombies(二分答案)相关推荐

  1. ZOJ 4062 Plants vs. Zombies(二分)

    ZOJ 4062 Plants vs. Zombies 意义不明的花妈和芳香. There are plants in DreamGrid's garden arranged in a line. F ...

  2. ZOJ 4062 Plants vs. Zombies 2018 ICPC 青岛站 E Plants vs. Zombies

    ZOJ 4062 二分 哎,二分,二分,二分,我咋就没想到啊,在一篇博客上看到一句话: 一般此类最小值最大问题都是二分,此题显然也是可以二分植物的高度的. 博客链接:https://www.cnblo ...

  3. 2018青岛ICPC ZOJ 4062: Plants vs. Zombies(二分)

    题意: 一条横轴上有n棵植物,第i棵植物在位置i上,生长速度为di,初始高度都为0,你的家在位置0上 你有一个洒水车,第0秒时在家门口(位置0),之后它每1秒都可以往左或往右移动一个单位(往左往右自己 ...

  4. zoj4062 Plants vs. Zombies 二分+模拟(贪心的思维)

    题目传送门 题目大意:有n个植物排成一排,标号为1-n,每株植物有自己的生长速度ai,每对植物浇一次水,该株植物就长高ai,现在机器人从第0个格子出发,每次走一步,不能停留,每一步浇一次水,总共可以走 ...

  5. ZOJ4062 Plants vs. Zombies 二分

    ZOJ4062 Plants vs. Zombies 一机器人给植物浇水,浇水之前必须移动一格,移动后必须浇水,从1~n的位置上有n个植物,每个植物都有自己的生长速度, 每浇一次生长一次,机器人初始位 ...

  6. 2018 ACM-ICPC 亚洲区域赛青岛站 E - Plants vs. Zombies(二分)

    题意 有n个植物,m次移动1格的机会, 以下n个数a1-an,代表每一次浇水(其实就是访问),该处的植物会增加防御值ai,初始防御值di=0 n个植物分别在坐标轴1,-,n的位置,浇水机的位置初始在0 ...

  7. Plants vs. Zombies【二分】

    ZOJ - 4062 Plants vs. Zombies BaoBao and DreamGrid are playing the game Plants vs. Zombies. In the g ...

  8. Plants vs. Zombies ZOJ - 4062

    参考博客: https://blog.csdn.net/lzc504603913/article/details/83824416 题目描述 有n个植物排成一行,从1-n.每个植物交一次水可以长高a[ ...

  9. Plants vs. Zombies【二分答案】

    题目链接 题意:有N盆花,现在有一个浇花机器人,当它走到一个花盆面前的时候,可以给该花浇对应的a[i]的权值的防御值(植物大战僵尸嘛),然后呢,机器人一共可以走M步,问最后防御权值最小的花的最大权是多 ...

最新文章

  1. Kafka史上最详细原理总结 ----看完绝对不后悔
  2. IOS TextField设置大全
  3. mysql配置读写分离无效_MySQL数据库的同步配置+MySql 读写分离
  4. v3s 全志_基于全志V3s的开源开发板,提供pcb和系统源码和资料
  5. TCP/IP学习笔记(三)TCP流量控制以及滑动窗口
  6. 看《Linux入门讲座》随记
  7. aix查看oracle进程内存,Aix 查看进程占用内存大小(按从大小排列)
  8. WPF Unleashed Chapter 2:XAML Demystified 翻译(第二部分)
  9. dpkg: 处理归档 /var/cache/apt/archives/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb (--unpack)时出错: 无法安装 /lib/
  10. 通达信里的统计函数及区块背景函数
  11. Linux- 日常运维-w-查看系统负载
  12. 麦克纳姆轮速度分解再分析
  13. 一个人的简历(林肯)
  14. Exchange server 2007启用 设置pop3
  15. Hive(四)——数据操作
  16. matlab-lsqcurvefit函数 初始值选取
  17. 项目实战(一)HTML5+CSS3+JS完成前端网站的制作
  18. JQuery 简单表单验证
  19. 《游戏设计艺术(第2版)》——学习笔记(13)第13章 游戏机制必须平衡
  20. 【1024个人爆款文章】Android 安卓原生UI实现游戏《俄罗斯方块》,算法太多,把我写崩溃了,附源码

热门文章

  1. MindManager2021 Win/Mac v2020.19.思维导图软件安装下载激活教程
  2. 销售订单退货原因对应的快码
  3. linux设置网口ip地址,linux网口设置ip地址
  4. 如何压缩ppt文件大小?
  5. FPGA实现RGB转HSV的转换
  6. 剑三连接服务器未响应,剑三帮会联赛启航!武林争霸赛鹿死谁手,可能要看投资人谁更舍得...
  7. 程序员们,千万不要接私活
  8. 任正非、俞敏洪告诫有赞的老板白鸦:你错的离谱
  9. 22个关于ES6的最新面试题汇总整理
  10. v-if判断字符串是否相等