1. 程式人生 > >hdu 5037 Frog(貪心)

hdu 5037 Frog(貪心)

2個 spa ble log pri scan string 需要 tar

題目鏈接: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(貪心)