这题写了有一点时间,最开始想着优化一下时间,用优先队列去做,但是发现有锅,因为忽略了队的长度。

然后思考过后,觉得用时间线来模拟最好做,先把窗口前的队列填满,这样保证了队列的长度是统一的,这样的话如果到某个时间,队首的人已经服务完了,这样这个队列的长度就减少一,这就变成了所有队列中长度最短的队列,所以直接向这个队列里面添加一个人就可以了。

按照从小到大轮询窗口的话,这样正好符合题中的要求,就是队列长度相同短,先选窗口序号小的窗口。如果按照这种策略,少一个就补一个的策略,队列长度会一直保持相等。

#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;
}

最新文章

  1. 自己动手写一个简单的MVC框架(第二版)
  2. RobotFrameWork(二)Ride简单使用及快捷键
  3. css属性的选择对动画性能的影响
  4. C语言:链表实现的一个实例
  5. XPS to Blender 2.7x
  6. MYCAT介绍
  7. 【JTA】JTA允许应用程序执行分布式事务处理
  8. 高级进阶DB2(第2版)——内部结构、高级管理与问题诊断
  9. HTML中&lt;b&gt;标签和&lt;strong&gt;便签的区别
  10. PHP商城购物车类
  11. 传输中文乱码js解决方法
  12. 初探中间件(middleware)
  13. Tomcat使用常见问题
  14. 源码分析之RequestContextHolder
  15. C#异步编程のParallel(并行)
  16. js怎么将 base64转换成图片
  17. Script to Collect Log File Sync Diagnostic Information (lfsdiag.sql) (文档 ID 1064487.1)
  18. Python入门-随机漫步
  19. AtCoder Grand Contest 010
  20. linux内核移植过程问题总结

热门文章

  1. layer iframe 设置关闭按钮 和刷新和弹出框设置
  2. 解决Creating Server TCP listening socket 54.179.160.162:7001: bind: Cannot assign requested address
  3. Web API入参,响应规范
  4. STM32F103之ADC学习记录
  5. MySQL中int(11)的意思
  6. [Reversal 剧情设计] 第一章——不速之客
  7. beego 使用连接mysql 报错 register db Ping `default1`, Error 1049: Unknown database &#39;test_beego&#39; must have one register DataBase alias named `default`
  8. 每天进步一点点------Allegro 原理图到PCB网表导入
  9. 快速上手leetcode动态规划题
  10. 股票数据Scrapy爬虫