看板娘加载较慢请耐心等待qwq~~~

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);
			}
		}
	}
}
posted @ 2021-12-10 15:06  椎名·六花  阅读(97)  评论(0编辑  收藏  举报