hdu 5037 Frog(贪心)
Posted Gealo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 5037 Frog(贪心)相关的知识,希望对你有一定的参考价值。
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5037
题解:为了让放的石头有意义肯定是没l+1的距离放2个也就是说假设现在位置为pos那么在pos+1放一个在pos+l+1放一个这样就需要跳两次。于是这题要考虑的就是当前位置和前一个石头放的位置因为如果前一个石头的位置到a[i]的距离小于等于l那么当前位置就不能被走到。所以就拿l+1的距离来贪心。
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int M = 2e5 + 10; int a[M]; int main() { int t , n , m , l; scanf("%d" , &t); int Case = 0; while(t--) { scanf("%d%d%d" , &n , &m , &l); for(int i = 0 ; i < n ; i++) { scanf("%d" , &a[i]); } sort(a , a + n); a[n] = m; int pos = 0 , pre = -l; int ans = 0; for(int i = 0 ; i <= n ; i++) { ans += (a[i] - pos) / (l + 1) * 2; pre += (a[i] - pos) / (l + 1) * (l + 1); if(a[i] - pre > l) { pre = pos + (a[i] - pos) / (l + 1) * (l + 1); pos = a[i]; ans++; } else { pos = a[i]; } } printf("Case #%d: %d\n" , ++Case , ans); } return 0; }
以上是关于hdu 5037 Frog(贪心)的主要内容,如果未能解决你的问题,请参考以下文章
codeforces 1324 C. Frog Jumps(贪心/二分)