题目链接


题意:有N盆花,现在有一个浇花机器人,当它走到一个花盆面前的时候,可以给该花浇对应的a[i]的权值的防御值(植物大战僵尸嘛),然后呢,机器人一共可以走M步,问最后防御权值最小的花的最大权是多少,最小值最大问题。(机器人一开始处于位置0,花是1~N)

首先,二分答案是比较好想到的,就是check的时候,条件是真的多,譬如说,我们走到一个花,它还需要浇水,那么可以i、i+1、i、i+1、……这样来回的走,但是如果最后一个花,花N的时候,那么就有可能它不需要浇了,这里需要判断一下,再者,如果是中间步骤的时候,步数超过M了,需要立马判断掉。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 1e5 + 7;
int N;
ll M, a[maxN], t[maxN];
bool check(ll lim)
{for(int i=1; i<=N; i++){t[i] = (lim + a[i] - 1LL) / a[i];if(t[i] >= M) return false;}ll step = 0;for(int i=1; i<=N; i++){if(i == N && t[N] <= 0) return true;step++; t[i]--;if(step > M) return false;if(t[i] <= 0) continue;step += t[i] * 2LL;if(step > M) return false;t[i + 1] -= t[i];}return true;
}
int main()
{int T; scanf("%d", &T);while(T--){scanf("%d%lld", &N, &M);for(int i=1; i<=N; i++) scanf("%lld", &a[i]);ll l = 1, r = 1e17 + 10, mid = 0, ans = 0;while(l <= r){mid = (l + r) / 2LL;
//            mid = 4;if(check(mid)){l = mid + 1;ans = mid;}else r = mid - 1;}printf("%lld\n", ans);}return 0;
}

Plants vs. Zombies【二分答案】相关推荐

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

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

  2. ZOJ4062 Plants vs. Zombies 二分

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

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

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

  4. ZOJ 4062 Plants vs. Zombies(二分答案)

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

  5. Plants vs. Zombies【二分】

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

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

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

  7. Plants vs. Zombies(二分)

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

  8. Plants vs. Zombies

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

  9. UVA1396 Most Distant Point from the Sea(AM - ICPC - Tokyo - 2007)(计算几何,半平面交 + 二分答案)

    整理的算法模板合集: ACM模板 题目传送门 见<训练指南>P279 很明显就是一个二分答案,它问的是最远的点,直接枚举因为这里都是double类型的数所以有无限个点,我们可以直接二分. ...

最新文章

  1. “惊群”,看看nginx是怎么解决它的
  2. 金蝶K3很有意义的数字3
  3. 一步一步学习C#(一)
  4. [转载]Shark Machine Learning Library --之运行篇
  5. OpenMP在Windows下用VS使用
  6. python语句结束标志_jinja2.exceptions.TemplateSyntaxError:预期标记“打印语句结束”,已“发布” - python...
  7. C++ 类的隐式转换
  8. 关于CSS的碎片学习
  9. coreboot学习0:二度相逢是初识
  10. Amazon behavior question
  11. linux下用iperf测试步骤,网络性能测试工具Iperf详细使用图文教程
  12. stm32怎么入门?数电模电单片机先学哪个?
  13. XSS扫描器编写思路
  14. ios 设备获取idfa_通过Safari浏览器获取iOS设备UDID(设备唯一标识符)
  15. ps裁剪和裁切的区别_PS剪切、裁剪、裁切的区别
  16. opencv------绘制文本
  17. 小学课外拓展计算机活动计划,小学科学课外活动计划及总结
  18. 【无人机】【2011】直升机无人机的最优控制
  19. php获取搜索框的函数,PHP自定义函数获取搜索引擎来源关键字的方法
  20. uni-app开发经验分享二十二: uni-app大转盘思路解析

热门文章

  1. 第5章【思考与练习2】将数据集划分为训练集与测试集,查看决策树分类器的性能。 将例5-3中的分类器保存到文件中,然后重新加载预测给出的新数据。
  2. Schema_CN28_XNN0付款/扣除和转账净额
  3. 数学建模02 —— 多属性决策模型
  4. el upload ajax,Upload 上传 el-upload 上传配置请求头为Content-Type: multipart/form-data
  5. ​想知道与你最般配的伴侣长什么样?这个“夫妻相”生成器要火
  6. Excel与VBA编程中的常用代码
  7. ios客户端学习-被苹果开发者中心拒绝附件上传不上
  8. win11 安装make (gnu make)
  9. 学计算机能学好英语,英语专业转行学计算机能学好吗
  10. 登录验证 用户名 密码