ZOJ - 4062

题意:有n个植物排成一排,按顺序植物的编号是1-n,每个植物都有一个生长速率,有一个机器人,机器人可以走m步,每走一步,这个机器人就会浇一次水,浇一次水那个植物就会长

自身的生长速率那么高,然后现在要求最大的最小生长值,

思路:一般要求最大的最小值都是使用二分来求答案,我们二分出的答案做以下的测试

我们先求出每个位置大于最小值至少到达此位置几步

然后我们直接考虑当前位置是尽量往右走,走来回来增加此位置的生长速率,不过有很多细节,我们遇到负数的时候就不能往当前位置来回了,

肯定是其他的方向路线来走,不过步数基本一样,所以我们可以模拟路线步数出来,然后注意不要爆了long long

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<algorithm>
  4. #include<cstring>
  5. using namespace std;
  6. typedef long long ll;
  7. ll n,m;
  8. ll a[];
  9. bool lower(ll x)
  10. {
  11. ll res=,sum=;
  12. for(int i=;i<n;i++)
  13. {
  14. ll y=x/a[i]+(x%a[i]!=)-res;
  15. if(y<=)
  16. {
  17. if(i!=n-) y=;
  18. else y=;
  19. }
  20. res=y-;
  21. if(res<) res=;//如果当前的已经不需要来回了,就把右边的加上,
  22. sum+=res+y;//加了当前的还有旁边要走回的来回数
  23. if(sum>m) return false;
  24. }
  25. return true;
  26. }
  27. int main()
  28. {
  29. ll t;
  30. scanf("%lld",&t);
  31. while(t--)
  32. {
  33. scanf("%lld%lld",&n,&m);
  34. ll l=,r=1e18;
  35. for(int i=;i<n;i++)
  36. {
  37. scanf("%lld",&a[i]);
  38. }
  39. ll x=;
  40. while(l<=r)//二分出答案
  41. {
  42. ll mid=(l+r)/;
  43. if(lower(mid))
  44. {
  45. x=mid;
  46. l=mid+;
  47. }
  48. else{
  49. r=mid-;
  50. }
  51. }
  52. printf("%lld\n",x);
  53. }
  54. }

2018ICPC青岛 E - Plants vs. Zombies (二分+模拟)的更多相关文章

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

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

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

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4062 题目大意:给一个大小为n的数组,数组编号从1到n,每一个元素的值代表 ...

  3. 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$ ...

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

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

  5. 2018 青岛ICPC区域赛E ZOJ 4062 Plants vs. Zombie(二分答案)

    Plants vs. Zombies Time Limit: 2 Seconds      Memory Limit: 65536 KB BaoBao and DreamGrid are playin ...

  6. Plants vs. Zombies(二分好题+思维)

    Plants vs. Zombies http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5819 BaoBao and DreamG ...

  7. uva 12452 Plants vs. Zombies HD SP (树DP)

    Problem I: Plants vs. Zombies HD Super Pro Plants versus Zombies HD Super Pro is a game played not a ...

  8. ZOJ4062 Plants vs. Zombies(二分+贪心)

    题目链接:传送门 题目大意: 有n棵植物依次放在1-n,机器人从0出发浇水,每棵植物被浇水时di += ai,求浇m次水后min{di|1 ≤ i ≤ n}的最大值.(浇水时必须往左或往右走一步,落脚 ...

  9. 2018ACM/ICPC 青岛现场赛 E题 Plants vs. Zombies

    题意: 你的房子在0点,1,2,3,...,n(n<=1e5)点每个点都有一颗高度为0的花,浇一次水花会长a[i]. 你有一个机器人刚开始在你家,最多走m步,每一步只能往前走或者往后走,每走到一 ...

随机推荐

  1. 说说secondarynamenode作用和配置

    说说secondarynamenode作用 http://my.oschina.net/u/1464779/blog/289895 说说secondarynamenode的配置 hadoop2.X如何 ...

  2. eth

    今天说下Centos的eth0:0这个虚拟端口,应为学到ifcofig eth0:0 IP,可以给一个网卡设置俩个IP地址,但是只是临时设置,然而我想永久设置,所以就在网找,最终找到的方法是 可以先复 ...

  3. Tanya and Password CodeForces - 508D (欧拉回路)

    大意:给定n个长为3的子串, 求一个长为n+2的字符串包含所有子串. 相邻两个字符开一个节点, 建图跑欧拉回路, 若存在的话长度一定是$\le n+2$.

  4. 『C++』基础知识点

    一.基础知识 1.C++编译流程 以Unix系统编译中间文件为说明: .cpp—(编译预处理)—>.ii—(编译)—>.s—(汇编)—>.o—(ld,连接)—>.out 2.# ...

  5. (一)从设计的角度来看ADT(Java)

    <数据结构与抽象——Java语言描述>第一章学习笔记 感想:以前学数据结构关注于方法及实现,为了完成作业和手写代码,没有从设计层面考虑过,第一章设计一个bag ADT,借助于Java in ...

  6. 基于jquery实现页面loading加载效果

    实现loading 加载提示 ······ 透明遮罩 居中效果 具体代码如下: CSS样式部分: <style type="text/css"> .background ...

  7. express文件上传中间件Multer详解

    express文件上传中间件Multer详解 转载自:https://www.cnblogs.com/chengdabelief/p/6580874.html   Express默认并不处理HTTP请 ...

  8. ZCRM_DAY_IN_WEEK

    FUNCTION zcrm_day_in_week. *"------------------------------------------------------------------ ...

  9. servlet-api-2.4.jar not loaded(转)

    信息: validateJarFile(D:/xj/workspace/webworktest/webapp/WEB-INF/lib/servlet-api-2.4.jar) - jar not lo ...

  10. [luogu P3628] [APIO2010]特别行动队

    [luogu P3628] [APIO2010]特别行动队 题目描述 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特 ...