• hdu4884 模拟


    题意:
          一个厨师,他能炒n道菜,他每次炒菜用时t分钟,每次最多可以炒同样的菜k分,有m个人来买饭,给你每个人来的时间和菜的种类以及份数,问你每个人都是什么时候离开的。


    思路:

          这种题目,直接模拟没话说,没啥好提供思路的,就说一个地方吧,做这种模拟题的时候要结合实际去做,比如现在来了一个人,他要炒菜12份,你每次最多炒菜5份,那也就是所要炒3次,那么第三次炒之前又来了一个人,要炒同样的菜若干份,你第三次还可以在多炒三次,那么就多炒三份呗,(省燃料了)。如果后来的这个人要的份数小于等于3那么这两个人就是一起走的呗,否则就先给他炒出来3份,差多少等排队轮到他再说,别硬模拟,想好了再写会方便很多。

    #include<stdio.h>
    #include<string.h>
    
    typedef struct
    {
       int ans ,time ,id ,g;
    }NODE;
    NODE P[1005];
    
    int main ()
    {
        int nowtime ,i ,j;
        int n ,t ,k ,m ,h ,f ,T;
        scanf("%d" ,&T);
        while(T--)
        {
             scanf("%d %d %d %d" ,&n ,&t ,&k ,&m);
             for(i = 1 ;i <= m ;i ++)
             {
                scanf("%d:%d %d %d" ,&h ,&f ,&P[i].id ,&P[i].g);
                P[i].time = h * 60 + f;
                P[i].ans = -1;
             }
              nowtime = P[1].time;
              for(i = 1 ;i <= m ;i ++)
              {
                   if(P[i].ans != -1) continue;
                   if(P[i].time > nowtime) nowtime = P[i].time;
                   int tt = (P[i].g + k - 1) / k * t;
                   P[i].ans = nowtime + tt;
                   int zuihouyiguo = nowtime + P[i].g / k * t;
                   nowtime = P[i].ans;
                   int shengyu = tt / t * k - P[i].g;
                   for(j = i + 1 ;j <= m && shengyu;j ++)
                   {
                      if(P[j].time > zuihouyiguo) break;
                      if(P[j].id != P[i].id)continue;
                      if(shengyu >= P[j].g)
                      {
                         P[j].ans = P[i].ans;
                         shengyu -= P[j].g;
                      }
                      else
                      {
                         P[j].g -= shengyu;
                         shengyu = 0;
                      }
                   }
                }
                for(i = 1 ;i <= m ;i ++)
                printf("%02d:%02d
    " ,P[i].ans / 60 % 24 ,P[i].ans % 60);
                if(T) puts("");
          }
          return 0;
    }
    



  • 相关阅读:
    CSU1784
    HDU 6128 Inverse of sum(数学)
    容斥原理入门
    HDU 6129 Just do it(规律)
    HDU 6140 Hybrid Crystals(zz)
    HDU 6143 Killer Names(排列+容斥,dp)
    zzuli 2177 Contest
    zzuli 2180 GJJ的日常之沉迷数学(逆元)
    除法逆元入门
    乘法逆元数论篇
  • 原文地址:https://www.cnblogs.com/csnd/p/12062916.html
Copyright © 2020-2023  润新知