codeforces #262 DIV2 C称号Present(二分法+贪婪)
2015-07-20 09:15
477 查看
职务地址:http://codeforces.com/contest/460/problem/C
这个题是用二分枚举最小值。然后推断是否能在规定的次数内使得全部的数都达到这个值。推断的时候要用贪心的方法推断,从左往右遍历。这时候须要让每次浇花的范围尽量向右。所以当到达一个不得不浇花的地方时,要继续占用所须要的浇花次数。当浇花次数不够用的时候,就说明无法达到。
在我的代码中,c数组是记录当前到了该点的时候浇花范围的最右界。表示到了这个地方的时候少了多少次覆盖。y就代表当前这个数被多少个浇花范围覆盖。x是指还剩余的浇花次数。
忘了初始化。。二分非常明显不好调试。
。调了将近20分钟才发现忘了对C数组初始化。。
。sad。
。。。
代码例如以下:
这个题是用二分枚举最小值。然后推断是否能在规定的次数内使得全部的数都达到这个值。推断的时候要用贪心的方法推断,从左往右遍历。这时候须要让每次浇花的范围尽量向右。所以当到达一个不得不浇花的地方时,要继续占用所须要的浇花次数。当浇花次数不够用的时候,就说明无法达到。
在我的代码中,c数组是记录当前到了该点的时候浇花范围的最右界。表示到了这个地方的时候少了多少次覆盖。y就代表当前这个数被多少个浇花范围覆盖。x是指还剩余的浇花次数。
忘了初始化。。二分非常明显不好调试。
。调了将近20分钟才发现忘了对C数组初始化。。
。sad。
。。。
代码例如以下:
#include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <algorithm> #include <queue> using namespace std; #define LL __int64 LL a[110000], b[110000], c[110000]; int main() { LL n, m, i, w, ans, x, y; scanf("%I64d%I64d%I64d",&n,&m,&w); for(i=0;i<n;i++) { scanf("%I64d",&a[i]); } memset(c,0,sizeof(c)); LL low=1, high=1e10, mid; while(low<=high) { mid=(high+low)/2; //printf("%I64d\n",mid); x=m; y=0; memset(c,0,sizeof(c)); int flag=0; for(i=0;i<n;i++) { b[i]=mid-a[i]; if(b[i]<0) b[i]=0; } for(i=0;i<n;i++) { y+=c[i]; b[i]-=y; if(b[i]>0) { if(x-b[i]<0) { flag=1; break; } else { x-=b[i]; y+=b[i]; if(i+w<n) c[i+w]-=b[i]; } } } //printf("%I64d %d\n",mid, flag); if(flag) { high=mid-1; } else { ans=mid; low=mid+1; } //printf("%I64d\n",ans); } printf("%I64d\n",ans); return 0; }
相关文章推荐
- LeeCode-Invert Binary Tree
- oracle connect by用法
- iOS开发 偷懒小技巧---自定义XCode代码片段
- 折价买分级基金的教程
- Struts2 国际化
- 开始刷leetcode day72: Kth Smallest Element in a BST
- Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)
- The import java.util cannot be resolved
- Vim技巧之四大模式_普通模式
- 动画特效六:三维过度
- LeeCode-Contains Duplicate
- Android 代码混淆打包
- iOS开发zhiATM机的设计与实现
- Python绘图基础
- 据序和中序序列或者也许为了一个二进制序列,恢复二进制和打印图像(c语言)
- 计蒜客-----泥塑课
- LeeCode-Linked List Cycle
- java synchronized用法
- 初识命令行参数(以my_chmod为例)
- eclipse解决editor does not contain a main type的方法