EOJ 医疗调度系统
EOJ 医疗调度系统
这个题是数据结构上机课的题,没有找到公开题目
problem
维护一个队列,支持操作:
1、输出队首
2、将队列中的 \(x(1 \le x \le 1e9)\)提前到队首
(操作次数m小于1000)
sov
注意到操作次数很少,所以直接 \(O(m^{2})\)过掉
用vector模拟队列,先存入1000个数,如果有提前操作,遍历查找这个数在不在队列里,在的话提前,不在的话直接把这个数插入到队头。输出操作直接输出队头,并将他移到队尾。
code
#include<bits/stdc++.h>
using namespace std;
vector<int> que;
signed main()
{
int n, m, cs = 1;char c;
while(cin >> n >> m)
{
if(n == 0 && m == 0)
break;
cout << "Case " << cs++ << ":" << endl;
que.clear();
for(register int i = 1; i <= min(n, m); ++i) que.push_back(i);
for(register int i = 1, x; i <= m; ++i)
{
cin >> c;
if(c == 'N')
{
cout << que[0] << endl;
que.push_back(que[0]);
que.erase(que.begin());
}
if(c == 'E')
{
cin >> x;
for(auto j = que.begin(); j != que.end(); ++j)
{
if(*j == x)
{
que.erase(j);
break;
}
}
que.insert(que.begin(), x);
}
}
}
}