zoukankan      html  css  js  c++  java
  • hdu 6709 Fishing Master 贪心

    感觉题意没说清楚,人手中可以存放多条鱼等着烤。

    假设每条鱼烤熟需要的时间都很长,那么我们就开始钓一条鱼,然后这面烤着鱼,钓一条鱼,等着这条烤好,以此循环。那么总时间就是k + Σt[i]。

    但是实际上可能会有一些鱼烤的特别快,这面鱼都烤好了,我那面还没钓上来新的鱼,导致炉子时间就浪费了。

    我们考虑对于一条鱼i,在它烧烤的过程中,我们能钓t[i] / k的鱼。

    如果Σt[i]/k >= n - 1,那么我们就可以以一种合理的方法安排钓鱼的顺序,从而使得炉子时间不浪费。总时间就是k + ∑t[i]。

    如果Σt[i]/k < n - 1,那么我们就不可避免地要浪费一些炉子时间。对于一条鱼i烧烤过程中,我们可以浪费k - t[i]%k的炉子时间,来额外钓一条鱼。

    我们看一下Σt[i] / k 和n - 1差距多少条鱼,选择较小的k - t[i] % k 来弥补即可。

    记得开 long long 

     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 typedef long long ll;
     5 int T,n,k,cnt;
     6 ll tim;
     7 int t[100100],lst[100100];
     8 int main()
     9 {
    10     for (scanf("%d",&T);T != 0;T--)
    11     {
    12         scanf("%d%d",&n,&k);
    13         tim = k;
    14         cnt = 0;
    15         for (int i = 1;i <= n;i++)
    16             scanf("%d",&t[i]);
    17         for (int i = 1;i <= n;i++)
    18         {
    19             tim += t[i];
    20             cnt += t[i] / k;
    21             lst[i] = k - t[i] % k;
    22         }
    23         if (cnt < n - 1)
    24         {
    25             sort(lst + 1,lst + n + 1);
    26             for (int i = 1;i <= n - 1 - cnt;i++)
    27                 tim += lst[i];
    28         }
    29         printf("%lld
    ",tim);
    30     }
    31     return 0;
    32 }
    心之所动 且就随缘去吧
  • 相关阅读:
    docker备忘录
    GUAVA-RateLimit
    JDK各版本发展史
    C++ 基础备忘录
    浅谈MES
    MES在流程和离散制造企业的15个差别!
    mysql连接oracle补偿方案—odbc驱动
    WinForm控件Chart的图表类型
    C#的异常处理机制(try...catch...finally)
    oracle 横向列变为纵向列
  • 原文地址:https://www.cnblogs.com/iat14/p/11403551.html
Copyright © 2011-2022 走看看