• PAT甲题 1014 Waiting in Line


    PAT甲题 1014 Waiting in Line

    思路:

    1.网上大家都是用的队列,好像最近用map用的上瘾我依旧用了map;
    2.每有一个人进黄线内,他的开始时间和结束时间就已经确定,我定义了一个map存储顾客号和他的结束时间,若开始时间在五点或五点以后则不记录;
    3.定义一个map存储时间序列,即从小到大存储每个会有人离开的时间点,时间是关键字,窗口号是值,若此时有多人离开,将所有窗口号取出从小到大进行排序,然后依次进人;

    注意点:

    1.只要开始时间在五点前,都进行服务,而不比较结束时间;
    2.用分钟做,最后输出再化成时间格式;
    3.最后一点坑到我了,但是我看别人都没什么问题,就是不仅在黄线外的要考虑Sorry,在黄线里的也要加上Sorry,很常识对吧,但是我花了很久才发现我程序在黄线内忘记判断了,如果测试点4没过,那就是这个原因了

    代码:

    #include<iostream>
    #include<algorithm>
    #include<map>
    using namespace std;
    bool cmp(int a, int b)
    {
    	 return a < b;
    }
    int N, M, K, Q, cost, inputNo = 1;
    map<int, int> mp;   
    multimap<int, int> tQueue;  //时间序列
    int main()
    {
     cin >> N >> M >> K >> Q;
     int total_t[N] = { 0 };
     for (int i = 0; i < M&&inputNo <= K; i++)
     	 for (int j = 0; j < N&&inputNo <= K; j++, inputNo++)
     	 {
      		 cin >> cost;
      		 if (total_t[j] < 540)  //前面累计时间>=540时不计入
      		 {
      			  total_t[j] += cost;
       			  tQueue.insert(make_pair(total_t[j], j));
       			  mp[inputNo] = total_t[j];
     		  }
    	  }
     map<int, int>::iterator it = tQueue.begin();
     while (inputNo <= K)   //人数若大于N*M
     {
    	  int t, no[N];
    	  no[0] = it->second;
    	  t = (it++)->first;
    	  int i = 1;
    	  for (; it->first == t; i++, it++)
    	  	 no[i] = it->second;  //将相同时间点依次取出
    	  sort(no, no + i, cmp);
    	  for (int j = 0; j < i&&inputNo <= K; j++, inputNo++)
    	  {
    	 	  cin >> cost;
    	 	  if (total_t[no[j]] < 540)   //前面累计时间>=540时不计入
    	 	  {
    	   		 total_t[no[j]] += cost;
    	   		 tQueue.insert(make_pair(total_t[no[j]], no[j]));
    	  		 mp[inputNo] = total_t[no[j]];
    	 	  }
    	  }
    }
    for (int i = 0; i < Q; i++)
     {
    	  int c_id;
    	  cin >> c_id;
    	  mp[c_id] != 0 ? printf("%02d:%02d
    ", mp[c_id] / 60 + 8, mp[c_id] % 60) : printf("%s
    ", "Sorry");
     }
     return 0;
    }

    算法之路漫漫,还有很长的路要走啊

  • 相关阅读:
    xtrabackup之Innobackupex全备数据库
    没有Where条件下group by走索引
    Oracle中查看无效的对象、约束、触发器和索引
    udev/raw/asmlib/多路径 配置asm
    自适应游标共享技术02(一个简单的例子来走近ACS)
    自适应游标共享技术03(常用分析脚本)
    监控进程是否存在
    MySQL运行状态show status详解
    MySQL 加锁处理分析
    使用RMAN验证备份的有效性
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12309116.html
Copyright © 2020-2023  润新知