参考博客:

https://blog.csdn.net/lzc504603913/article/details/83824416

题目描述

有n个植物排成一行,从1-n。每个植物交一次水可以长高a[i],现在小蜗从0出发,每次只能走一格,总共可以总m步。每当小蜗到一个地方,就会给该处植物浇水,植物便长高a[i]
处于防御僵尸的目的,现要求使小蜗浇完水后,使最低的植物尽可能高。

思路

比赛的时候一直没什么思路。没想到是个二分。直接二分最矮的植物的高度,然后o(n)判断达到该高度要浇多少次水。求最小浇水次数的时候,每走到一个植物,就先浇一次水,然后判断是否够高,不够的话左右横跳,直到满足。具体实现还有很多细节,详细见代码注释。

代码

///求最大的最小必然要二分。我们直接二分答案
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
#define INF 0x3f3f3f3f
#define maxn 100005
#define ll long long int
int n,t;
ll a[maxn],b[maxn],m;
bool pd(ll x)
{if(x==0)return true;for(int i=1;i<=n+1;i++)b[i]=0;///数据卡的比较牛逼 这里写memset会超时for(int i=1;i<=n;i++){ll num=(x+a[i]-1)/a[i];///向上取整if(i==n&&b[i]>=num)break;///这一步不能省略 因为左边的安排完 最后一个可能恰好已经满足了///所以结束位置就在最后第二个 不用再跳到最后一个b[i]++;///走到当前这一位 已经要加1if(b[i]<num){///如果之前跳到这一步的 加上走过来的一次 还不够 要继续左右横跳b[i+1]+=num-b[i];///右边的要加上额外多跳的步数b[i]=num;}}ll sum=0;for(int i=1;i<=n+1;i++){///这个地方要加到n+1的话其实是最后一个位置向左反复跳也行sum+=b[i];          ///因为左边肯定已经满足条件了  所以为了写代码方便就算在右边if(sum>m)return false;}return true;
}
int main()
{scanf("%d",&t);while(t--){scanf("%d%lld",&n,&m);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);ll l=0,r=1e17;while(l<r-1){ll mid=l+(r-l)/2;if(pd(mid))l=mid;else r=mid;}printf("%lld\n",l);}return 0;
}

Plants vs. Zombies ZOJ - 4062相关推荐

  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(二分答案)

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

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

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

  4. Plants vs. Zombies【二分】

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

  5. Plants vs. Zombies

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

  6. Plants vs. Zombies(二分)

    文章目录 [Plants vs. Zombies](https://zoj.pintia.cn/problem-sets/91827364500/problems/91827370312) 题意 解题 ...

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

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

  8. 植物大战僵尸(Plants vs. Zombies)Mac版本

    游戏介绍 可怕的僵尸即将入侵你的家,唯一的防御方式就是你栽种的植物!武装你的植物,切换他们不同的功能,诸如强悍的豌豆射手或樱桃炸弹,更加快速有效的将僵尸阻挡在入侵的道路上.不同的敌人,不同的玩法构成五 ...

  9. 关于植物大战僵尸| Plants VS Zombies 运行时 Fatal Error

    系统/System:Win 10 游戏版本Game Version:Plants VS Zombies 1.0 英文原版 下载链接见PZ的贴吧,或: 植物大战僵尸链接 下载的资源无需安装就可直接运行. ...

最新文章

  1. Axure 8 window 下载,破解
  2. .net 中,使用c# 语言 ,执行exe程序。
  3. 事务配置_SSH(五)- 使用注解方式配置事务管理
  4. Red Hat Enterprise Linux 5.4安装GCC
  5. 【IM】关于条件随机场CRF的理解
  6. PHP反射的优点,PHP 反射使用和理解
  7. 从github clone文件: Failed to receive SOCKS4 connect request ack.
  8. SQL计算两个日期之间的工作天数
  9. 使用GIT不小心merge后的回滚操作
  10. html透明颜色代码,CSS背景颜色透明
  11. 手撕包菜 mysql_新版手撕包菜安装教程
  12. PS如何制作一寸照片
  13. Android adb shell启动应用程序的方法
  14. 上位机软件工程师_自动化项目如何做?PLC工程师教你几招!
  15. 高等数学——曲线积分的计算(弧长)
  16. python输出两个元素空格隔开_python实现将一串字符每两个一组,中间用空格隔开...
  17. autocad application 版本
  18. HTML div设置菜鸟教程
  19. tiny4412 裸机程序 八、重定位到DRAM及LCD实验
  20. 基于WebGL架构的3D可视化ThingJS平台—粮仓3D场景

热门文章

  1. 文件包含之本地包含的利用
  2. js高级程序设计(一) —— js简介
  3. R语言中调用windows中的字体方法
  4. 22个关于ES6的最新面试题汇总整理
  5. vue+elementui 同时有上传文件和批量上传文件功能,上传文件或批量上传文件后必须刷新才能再次上传文件
  6. 小说作者推荐:臣年合集
  7. linux根文件系统配置,Linux学习笔记__ Linux根文件系统详解
  8. linux系统服务器忘记密码怎么办
  9. 第48章 MDK的编译过程及文件类型全解
  10. wps 根据单元格值 设置单元格所在行 颜色(大于0 行红色 小于0 行xx色)