PAT甲级1014. Waiting in Line

题意:

假设银行有N个窗口可以开放服务。窗前有一条黄线,将等候区分为两部分。客户要排队的规则是:

每个窗口前面的黄线内的空间足以包含与M个客户的一条线。因此,当所有N行都满时,

所有的客户(和包括)(NM + 1)第一个将不得不等待在黄线后面的一行。

每个客户将选择最短的行,以便在穿过黄线时等待。如果长度相同的两行以上,客户将始终选择数字最小的窗口。

客户[i]将在T [i]分钟内处理他/她的交易。

前N名客户被假定在上午8:00送达。

现在给予每个客户的处理时间,您应该告诉客户完成业务的确切时间。

例如,

假设一个银行有2个窗口,每个窗口可能有两个人在黄线内等待。分别有1个,2个,6个,4个和3分钟的交易有5个客户等待交易。在上午08:00,客户1在window1服务,而客户2在window2服务。

Customer3将在window1之前等待,customer4将在window2之前等待。客户5将等待黄线后面。

在08:01,客户1完成,客户5进入窗口1之前的行,因为这条线似乎更短。 Customer2将在08:02,customer4在08:06,customer3在08:07离开,最后在08:10退出customer5。

输入

每个输入文件包含一个测试用例。每个案例以包含4个正整数的行开始:N(<= 20,窗口数),M(<= 10,黄线内每行的最大容量),K(<= 1000,客户数) ,和Q(<= 1000,客户查询数)。

下一行包含K个正整数,

这是K客户的处理时间。

最后一行包含Q正整数,表示正在询问他们完成交易时间的客户。客户的编号从1到K.

输出

对于每个Q客户,他们的交易完成时间一行打印,

格式为HH:MM,其中HH在[08,17]中,MM在[00,59]中。请注意,由于银行在17:00之后每天关闭,对于那些在17:00之前无法上门的客户,您必须输出“抱歉”。

思路:

用优先队列模拟排队。

题目中有个地方需要注意,就是只要在17:00前到的都可以服务。包括17:00点。这个地方比较骚。

另外在黄线内就不能移动了,无论你旁边的队伍是否已经空了。

ac代码:

C++

// pat1014.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" #include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>
#include<unordered_map> using namespace std; int cusk[1005];
int win[22]; struct custom {
int id;
int time;
int window;
}; struct customcmp {
bool operator()(const custom &a, const custom &b)
{
if (a.time != b.time)
{
return a.time > b.time;
}
else
{
return a.window > b.window;
}
}
}; int main()
{
int n, m, k, q;
priority_queue<custom, vector<custom>, customcmp> queue;
memset(win, 0, sizeof(win));
memset(cusk, 0, sizeof(cusk));
cin >> n >> m >> k >> q;
for (int i = 1; i <= k; i++)
{
cin >> cusk[i];
} for (int i = 0; i < m; i++)
{
for (int j = 1; j <= n; j++)
{
custom cus;
if (win[j] >= 540 || win[j] < 0)
win[j] = -1;
else
win[j] += cusk[i * n + j];
cus.id = i * n + j;
cus.time = win[j];
cus.window = j;
cusk[i * n + j] = win[j];
queue.push(cus);
}
} int cur = n * m + 1;
while (cur <= k)
{
custom cc = queue.top();
custom cus;
queue.pop();
if (win[cc.window] >= 540 || win[cc.window] < 0)
win[cc.window] = -1;
else
win[cc.window] += cusk[cur];
cus.id = cur;
cus.window = cc.window;
cus.time = win[cc.window];
cusk[cur] = win[cc.window];
queue.push(cus);
cur++;
} int id,tempres;
while (q--)
{
cin >> id;
tempres = cusk[id];
if (tempres < 0) cout << "Sorry" << endl;
else
{
int hour = 8, minute = 0;
hour += tempres / 60;
minute += tempres % 60;
printf("%02d:%02d\n", hour, minute);
}
} return 0;
}

PAT甲级1014. Waiting in Line的更多相关文章

  1. PAT 甲级 1014 Waiting in Line (30 分)(queue的使用,模拟题,有个大坑)

    1014 Waiting in Line (30 分)   Suppose a bank has N windows open for service. There is a yellow line ...

  2. PAT A 1014. Waiting in Line (30)【队列模拟】

    题目:https://www.patest.cn/contests/pat-a-practise/1014 思路: 直接模拟类的题. 线内的各个窗口各为一个队,线外的为一个,按时间模拟出队.入队. 注 ...

  3. PAT甲级——A1014 Waiting in Line

    Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...

  4. PAT 1014 Waiting in Line (模拟)

    1014. Waiting in Line (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Suppo ...

  5. 1014 Waiting in Line (30分)

    1014 Waiting in Line (30分)   Suppose a bank has N windows open for service. There is a yellow line i ...

  6. PTA (Advanced Level) 1014 Waiting in Line

    Waiting in Line Suppose a bank has N windows open for service. There is a yellow line in front of th ...

  7. 【PAT甲级】1014 Waiting in Line (30 分)(队列维护)

    题面: 输入四个正整数N,M,K,Q(N<=20,M<=10,K,Q<=1000),N为银行窗口数量,M为黄线内最大人数,K为需要服务的人数,Q为查询次数.输入K个正整数,分别代表每 ...

  8. PAT 1014. Waiting in Line

    Suppose a bank has N windows open for service.  There is a yellow line in front of the windows which ...

  9. PAT 1014 Waiting in Line (模拟)

    Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...

随机推荐

  1. gunicorn之日志详细配置

    gunicorn的日志配置 gunicorn的日志配置相关的常用参数有4个,分别是accesslog,access_log_format,errorlog,loglevel. accesslog:用户 ...

  2. 【并行计算】用MPI进行分布式内存编程(二)

    通过上一篇中,知道了基本的MPI编写并行程序,最后的例子中,让使用0号进程做全局的求和的所有工作,而其他的进程却都不工作,这种方式也许是某种特定情况下的方案,但明显不是最好的方案.举个例子,如果我们让 ...

  3. javascript 之数据类型--01

    写在前面 国庆整理资料时,发现刚开始入门前端时学习JS 的资料,打算以一个基础入门博客记录下来,有不写不对的多多指教: 先推荐些书籍给需要的童鞋 <JavaScript 高级程序设计.pdf&g ...

  4. CSS3 object-fit 图像裁剪

    MDN定义 https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit 该 object-fit CSS 属性指定替换元素的内容应该如何适应 ...

  5. Visual Tracking with Fully Convolutional Networks

    http://blog.csdn.net/carrierlxksuper/article/details/48918297 传统的跟踪方法依赖低维的人工特征,但这种特征对目标的外观变化等问题不够鲁棒. ...

  6. jq用户评论点击回复简单代码。

    类似这种镶套回复评论: <div> <ul> <!--一条评论 begin--> <li> <div class="user-colum ...

  7. EasyUi – 5.修改$.messager.show() 弹出窗口在浏览器顶部中间出现

    由于在easyui中$.messager.show() 只有一种弹出方式(在浏览器的或下角弹出),我最近在做一个项目的时候需要在浏览器的顶部中间出现.由于自己写花那么多的时间,所以就去修改了原码(不推 ...

  8. Python教程(一)Python简介

    Python就为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象地称作“内置电池(batteries included)”.用Python开发,许多功能不必从零 ...

  9. git使用点滴:如何查看commit的内容

    在push之前有时候会不放心是不是忘记加某些文件,或者是不是多删了个什么东西,这时候希望能够看看上次commit都做了些什么. 一开始想到的是用Git diff,但是git diff用于当前修改尚未c ...

  10. 长沙理工大学第十二届ACM大赛-重现赛 L - 选择困难症

    题目描述 小L有严重的选择困难症. 早上起床后,需要花很长时间决定今天穿什么出门. 假设一共有k类物品需要搭配选择,每类物品的个数为Ai,每个物品有一个喜欢值Vj,代表小L对这件物品的喜欢程度. 小L ...