Codefores 460C-Present(二分+贪心)
2017-06-26 21:59
375 查看
在打哈尔滨理工大学个人训练赛做到的题目。
觉得挺不错的,挺锻炼思维的。
题目大意:给定n朵花,每朵花的高度不一样,还有m天,有一种神奇的水可以使相邻的w朵花每天长高1,每天只能浇一次,问最矮的花最后最高能多少。
遇到这种最矮的最高问题,应该很快想到二分才对,但是又没想到。
然后想到二分应该怎么继续呢。那肯定是判断每朵花能不能达到x,这时就应该从左往右扫了。因为是每一朵,而根据这个相邻w,前面的w-1朵具有特殊性,前w朵中的第i朵一定能享受到他前面花浇的水,而w往后的就享受不到i-w之前浇的水了,这里可以用前缀和记录浇的水。
另外需要判断天数是否大于m以及是否都能达到x
觉得挺不错的,挺锻炼思维的。
题目大意:给定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; } else r = mid - 1; } printf("%lld\n",ans); } }
相关文章推荐
- Codeforces #262 (Div. 2) C. Present(二分+贪心)
- CodeForces 460C--- Present(二分+贪心)
- CodeForces 460C--- Present(二分+贪心,还有个地方会TLE)
- Codeforecs 493C Vasya and Basketball 贪心+二分
- codeforces #262 DIV2 C题Present(二分+贪心)
- Present CodeForces - 460C 二分—答案
- Codeforces 460C Present (贪心 + 二分)
- CodeFores 665D Simple Subset(贪心)
- Codeforecs 785C Anton and Fairy Tale 数学+二分
- 洛谷1084/codevs1218 二分+倍增+贪心,疫情控制,分步讲解
- Educational Codeforces Round 3:D. Gadgets for dollars and pounds(二分答案+贪心)
- Codeforces Round #307 (Div. 2) C. GukiZ hates Boxes 贪心/二分
- E. Vladik and cards Codeforces Round #384 (Div. 2) 好题 二分+(贪心+状态压缩DP)判断
- Codeforces Round #377 (Div. 2) D. Exams 二分+贪心 or 纯贪心水过
- Codeforces Round #377 (Div. 2) C. Sanatorium(贪心,二分)
- Codeforces Round #352 (Div. 2) D 二分贪心两头 + 细节
- codeforce 551C GukiZ hates Boxes(二分+贪心)
- Codeforces Round #211 (Div. 2) D题(二分,贪心)解题报告
- Codeforces Educational Codeforces Round 3 D. Gadgets for dollars and pounds(二分 + 贪心)
- CodeForces 460C——二分+前缀和—— Present