zoukankan      html  css  js  c++  java
  • 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
    " , ++Case , ans);
        }
        return 0;
    }
  • 相关阅读:
    Java集合的Stack、Queue、Map的遍历
    LinkedHashMap的实现原理
    HashSet的实现原理
    HashMap的实现原理
    leetcode526
    leetcode406
    leetcode413
    leetcode513
    leetcode338
    leetcode419
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/7689291.html
Copyright © 2011-2022 走看看