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;
    }
  • 相关阅读:
    产品经理经常犯的错误李可按
    skills_hive
    skills_office
    skills_idea
    skills_linux
    skills_ubuntu
    skills_git
    skills_redis
    skills_centos
    problems_hive
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/7689291.html
Copyright © 2011-2022 走看看