不会的题
  • 板块学术版
  • 楼主liujinhao000
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/2/25 16:26
  • 上次更新2023/10/28 07:47:19
查看原帖
不会的题
609499
liujinhao000楼主2022/2/25 16:26

题目描述

某银行只有一个ATM处理机,有N个人陆续来使用ATM机,编号按照到达的时间次序为1,2,3...,N。已知每个人有到达时间di和需要处理的时间ti。如果前面有人还没有操作完,就要排队,但如果排队的人已经有5个,刚到达的人就会转到其他地方去。(如果第1个人刚好操作完成,刚到达的人是一定可以排队的) 输入数据中有一些数据的ti是-1,这表示来的人不是来排队的,是有特别任务:他询问排队的最后一个人的编号。如果排队的队伍为空,输出-1。 请编程输出这些询问出的编号。

输入格式

第一行1个正整数:N,范围在[1,1000]。 第2到N+1行:每行2个整数di和ti,di范围在[1,10000],ti范围在[-1,100]。保证di是递增的。

输出格式

一行,一些整数。 输入输出样例 输入 复制

10

2 9

3 10

5 3

6 -1

7 4

9 10

10 5

11 3

200 1

201 -1

输出 复制

3 -1

说明/提示 样例解释: ① 第 2 个时间,第 1 个人来到 ATM 机上处理;他将在第 11 个时间处理完离开; ② 第 3 个时间,第 2 个人到达;他将在第 21 个时间处理完离开; ③ 第 5 个时间,第 3 个人到达;他将在第 24 个时间处理完离开; ④ 第 6 个时间,第 4 个人到达;询问队伍里的最后一个人编号是 3; ⑤ 第 7 个时间,第 5 个人到达;他将在第 28 个时间处理完离开; ⑥ 第 9 个时间,第 6 个人到达;他将在第 38 个时间处理完离开; ⑦ 第 10 个时间,第 7 个人到达;由于队伍里有 5 个人了,他离开这个银行; ⑧ 第 11 个时间,第 8 个人到达;由于第 1 个人处理完了,队伍人 4 个,他可以排队, 他将在第 41 个时间处理完离开; ⑨ 第 200 个时间,第 9 个人到达;他将在第 201 个时间处理完离开; ⑩ 第 201 个时间,第 10 个人到达;队伍为空,输出-1。

错误代码

#include <bits/stdc++.h>
using namespace std;
int main(){
deque<int>q;
deque<int>p;

int n;
cin>>n;

for(int i=1;i<=n;i++)
{
int x,y;
cin>>x>>y;

if(!p.empty())
{if(p.front()==0)
{q.pop_front();p.pop_front();}
if(!p.empty())
p.front()=p.front()-1;
if(p.front()==0)
{q.pop_front();p.pop_front();}
}

if((y==-1)&&(!q.empty()))
{cout<<i-1<<" ";continue;}
if((y==-1)&&q.empty())
{cout<<-1<<" ";continue;}

if((q.size()<5)&&(y!=1))
{
q.push_back(x);
p.push_back(y);
}

}

    return 0;
}
2022/2/25 16:26
加载中...