在打哈尔滨理工大学个人训练赛做到的题目。

觉得挺不错的,挺锻炼思维的。

题目大意:给定n朵花,每朵花的高度不一样,还有m天,有一种神奇的水可以使相邻的w朵花每天长高1,每天只能浇一次,问最矮的花最后最高能多少。

遇到这种最矮的最高问题,应该很快想到二分才对,但是又没想到。

然后想到二分应该怎么继续呢。那肯定是判断每朵花能不能达到x,这时就应该从左往右扫了。因为是每一朵,而根据这个相邻w,前面的w-1朵具有特殊性,前w朵中的第i朵一定能享受到他前面花浇的水,而w往后的就享受不到i-w之前浇的水了,这里可以用前缀和记录浇的水。

另外需要判断天数是否大于m以及是否都能达到x

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
#include <set>
#include <stack>
#define fuck() (cout << "------------------------------" << endl)
using namespace std;
const int maxn = 100000 + 5;
const int inf = 0x3f3f3f3f;
long long a[maxn];
long long b[maxn];
int n,m,w;// n是多少朵花,m是剩余几天,w是一次能浇多长。
bool check(long long x)//x 最矮的高度
{memset(b,0,sizeof(b));long long time = 0;long long sum = 0;for(int i=0; i<n; i++){if(i >= w) sum -= b[i-w];// 享受不到比他前m朵花少浇的水,应该是类似前缀和的味道。if(x > a[i] + sum) // 达不到x{b[i] = x - sum - a[i];  //达到x还需要几天sum += b[i];    // 少浇几天水time += b[i];   //浇水次数总和}if(time > m)return false;}return true;
}
int main()
{while(scanf("%d%d%d",&n,&m,&w)!=EOF && n){for(int i=0; i<n; i++)scanf("%lld",&a[i]);long long  l = 1, r = 100000000000000, mid ;long long ans = 0;while(l <= r){mid =  (l+r) >> 1;if(check(mid)){ans = mid;l = mid + 1;}elser = mid - 1;}printf("%lld\n",ans);}
}

Codefores 460C-Present(二分+贪心)相关推荐

  1. 蒟蒻的第一篇博客CF1041C Coffee Break(二分+贪心+set)

    CF1041C Coffee Break(二分+贪心+set) 描述 Recently Monocarp got a job. His working day lasts exactly mm min ...

  2. 洛谷P1182 数列分段 Section II(二分+贪心)

    题目描述 对于给定的一个长度为N的正整数数列 A1∼NA _{1∼N}A1∼N​,现要将其分成 M(M≤N)M(M≤N)M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一 ...

  3. Codeforces Round #262 (Div. 2) 460C. Present(二分)

    题目链接:http://codeforces.com/problemset/problem/460/C C. Present time limit per test 2 seconds memory ...

  4. [USACO16JAN]Angry Cows S[二分+贪心]

    题意:Bessie 设计了一款新游戏:Angry Cows.在这个游戏中,玩家发射奶牛,每头奶牛落地时引爆一定范围内的干草.游戏的目标是使用一组奶牛引爆所有干草. N 捆干草排列在数轴上的不同位置.第 ...

  5. BZOJ2525 [Poi2011]Dynamite 【二分 + 贪心】

    题目链接 BZOJ2525 题解 就是要求所有有炸弹的点到点燃点距离最大值最小 显然二分答案距离\(D\) 然后按深度排序,贪心点燃当前没覆盖的深度最深的点往上第\(D\)层的点 每覆盖一个点要标记其 ...

  6. hdu5248序列变换(二分+贪心)基础题

    题意(中文的直接粘题意吧)                                                                                        ...

  7. 外卖(food) 洛谷4040宅男计划 三分套二分贪心

    food评测传送门 [题目描述] 叫外卖是一个技术活,宅男宅女们一直面对着一个很大的矛盾,如何以有限的金钱在宿舍宅得尽量久.     外卖店一共有 N 种食物,每种食物有固定的价钱 Pi 与保质期 S ...

  8. LA 4254 Processor 处理器 【二分 贪心 优先队列】

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21663 二分: 最大值最小的问题通过二分来求解.对处理器速度进行 ...

  9. hdu 5248(二分+贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5248 解题思路:这道题我原本的思路是动态规划,结果看到数很大,结果放弃了.然后想到二分,思路是对的,只 ...

  10. poj3111 选取物品(二分+贪心)

    题目传送门 题意就是,n个物品,从中选取k个,要按照那个公式所取的值最大. 思路:最大化平均值的时候首先想到的就是二分, 我们设G(x) 为单位的重量不小于X, 我们的目标就是要找到满足条件的最大的X ...

最新文章

  1. CentOS6.9编译安装Nginx1.12
  2. 如何部署HTTPS 申请证书 安装证书
  3. mysql sqlserver 函数_等价于MySQL中的SQLServer函数SCOPE_IDENTITY()??mysql-问答-阿里云开发者社区-阿里云...
  4. 写作心得——文章标题的重要性之一
  5. Jzoj4755 快速荷叶叶变换
  6. ubuntu安装LDAP
  7. java学习(156):反序列化
  8. 苹果手机怎么在照片上添加文字_手机照片如何添加花样文字?原来方法这么简单!...
  9. dart map 转list_Dart 集合类型List Set Map循环forEach map where any every
  10. 云南大学软件测试,软件测试大赛云南省省赛在软件学院如期举行
  11. 信息时代不被淘汰,获取成功需有的十种能力
  12. 使用python原生态的min和max函数实现升序排序和降序排序
  13. 一年级美术下册教案(新人美版)
  14. 当BIM遇上GIS-无人机倾斜摄影三维建模(ContextCapture) 建设智慧城市方法详解
  15. 美团点评 2019校招 前端方向职位试卷在线考试
  16. AD19原理图的设计流程
  17. 移动硬盘提示格式化解决办法,未正确删除导致不能读取文件提示格式化解决方案
  18. 修改手机屏幕刷新率_手机屏幕刷新率真的越高越好吗?
  19. 为什么大数据平台要回归SQL
  20. CRC码的编码、解码(循环冗余校验码)

热门文章

  1. 你所做的每一件事都是最后一件
  2. 卡兹莫机器人报价_超级机器人大战MX隐藏机体入手方法
  3. 费波纳奇数c语言,费波纳奇数列
  4. python自然语言处理--第一篇(匹配字符串)
  5. 常用SQL命令汇总--多表查询
  6. 到底什么是运营!新人必看
  7. 地理坐标系和投影坐标系之间的关系 基本概念
  8. 内部方法调用,事务不起作用的原因及解决办法
  9. 浅谈数据中心供配电设计应用以及监控产品选型-Susie 周
  10. Linux驱动开发 --- IIC总线