PAT 1014 Waiting in Line (30分) 一个简单的思路
2024-10-08 13:49:54
这题写了有一点时间,最开始想着优化一下时间,用优先队列去做,但是发现有锅,因为忽略了队的长度。
然后思考过后,觉得用时间线来模拟最好做,先把窗口前的队列填满,这样保证了队列的长度是统一的,这样的话如果到某个时间,队首的人已经服务完了,这样这个队列的长度就减少一,这就变成了所有队列中长度最短的队列,所以直接向这个队列里面添加一个人就可以了。
按照从小到大轮询窗口的话,这样正好符合题中的要求,就是队列长度相同短,先选窗口序号小的窗口。如果按照这种策略,少一个就补一个的策略,队列长度会一直保持相等。
#include <bits/stdc++.h>
using namespace std;
const int maxn=1010;
int ans[maxn],a[maxn],N,M,K,Q,t[maxn];
queue<int> q[22];
int pret[22];
void print(int t)
{
if (t==-1) {
printf("Sorry\n");
return;
}
t+=480;
int hh=t/60,mm=t%60;
// printf("%d %d ",hh,mm);
if (hh>17) {
printf("Sorry\n");
}
else {
printf("%02d:%02d\n",hh,mm);
}
}
int main()
{
// freopen("in.txt","r",stdin);
scanf("%d%d%d%d",&N,&M,&K,&Q);
for (int i=1;i<=K;i++) {
scanf("%d",&t[i]);
}
for (int i=1;i<=Q;i++) {
scanf("%d",&a[i]);
}
int c=1;
for (int i=1;i<=M;i++) {
for (int j=1;j<=N;j++) {
q[j].push(c++);
if (c>K) {
break;
}
}
}
memset(ans,-1,sizeof(ans));
for (int i=0;i<=540;i++) {
if (c>K) break;
for (int j=1;j<=N;j++) {
int p=q[j].front();
int tt=t[p];
if (i-pret[j]==tt) {
ans[p]=i;
q[j].pop();
q[j].push(c++);
pret[j]=i;
if (c>K) {
goto outloop;
}
}
}
}
outloop:
for (int j=1;j<=N;j++) {
while (!q[j].empty()) {
if (pret[j]>=540) {
break;
}
int p=q[j].front();
ans[p]=pret[j]+t[p];
pret[j]+=t[p];
q[j].pop();
}
}
for (int i=1;i<=Q;i++) {
print(ans[a[i]]);
}
return 0;
}
最新文章
- 自己动手写一个简单的MVC框架(第二版)
- RobotFrameWork(二)Ride简单使用及快捷键
- css属性的选择对动画性能的影响
- C语言:链表实现的一个实例
- XPS to Blender 2.7x
- MYCAT介绍
- 【JTA】JTA允许应用程序执行分布式事务处理
- 高级进阶DB2(第2版)——内部结构、高级管理与问题诊断
- HTML中<;b>;标签和<;strong>;便签的区别
- PHP商城购物车类
- 传输中文乱码js解决方法
- 初探中间件(middleware)
- Tomcat使用常见问题
- 源码分析之RequestContextHolder
- C#异步编程のParallel(并行)
- js怎么将 base64转换成图片
- Script to Collect Log File Sync Diagnostic Information (lfsdiag.sql) (文档 ID 1064487.1)
- Python入门-随机漫步
- AtCoder Grand Contest 010
- linux内核移植过程问题总结
热门文章
- layer iframe 设置关闭按钮 和刷新和弹出框设置
- 解决Creating Server TCP listening socket 54.179.160.162:7001: bind: Cannot assign requested address
- Web API入参,响应规范
- STM32F103之ADC学习记录
- MySQL中int(11)的意思
- [Reversal 剧情设计] 第一章——不速之客
- beego 使用连接mysql 报错 register db Ping `default1`, Error 1049: Unknown database &#39;test_beego&#39; must have one register DataBase alias named `default`
- 每天进步一点点------Allegro 原理图到PCB网表导入
- 快速上手leetcode动态规划题
- 股票数据Scrapy爬虫