zoukankan      html  css  js  c++  java
  • 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;
    }
    



  • 相关阅读:
    jquerymobile动态添加元素之后不能正确渲染解决方法
    HTML5的新事件
    Visual Studio 2010扩展让JS与CSS实现折叠
    移动web开发--meta 之 viewport
    QR code二维码简介及Qrencode库的移植与使用
    http,socks5,socks4代理的区别
    关于代理服务器的原理及用法
    MTK的线刷工具Flash_Tool的常见错误码
    承认吧 --- SVN你根本就不会用,细说SVN的那点事儿
    SSH协议介绍 --- 有用
  • 原文地址:https://www.cnblogs.com/csnd/p/12062915.html
Copyright © 2011-2022 走看看