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 }
    心之所动 且就随缘去吧
  • 相关阅读:
    Python 之解析配置文件模块ConfigParser
    SonarQube代码质量管理平台
    SVN代码统计工具StatSVN
    python 3接口测试
    python+selenium使用chrome时,报错ignore certificate errors
    python3发送邮件(有附件)
    日记
    杂记 包含 serialize().ajaxStart() .ajaxStop()以及其他
    还是要说一下XML。全当日记
    桑心!XML
  • 原文地址:https://www.cnblogs.com/iat14/p/11403551.html
Copyright © 2011-2022 走看看