1013. 医疗调度系统

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
input:
3 6
N
N
E 1
N
N
N
10 2
N
N
0 0
思路:
受可旋栈1016的启发
本来觉得办法搞,因为p的范围给的很大,但是仔细思考之后就能发现c的范围并不大,只有1000,只要分类讨论,本质和1016是一样的

#include <cstdio>
#include <iostream>
using namespace std;
long long  p,c;
bool vis[1111111111];
struct QUEUE
{
	int head,tail,data[1111111];
	void init()
	{
		head=1111,tail=1110;
	}
	int size()
	{
		return tail-head+1;
	}
	int front()
	{
		return data[head];
	}
	int back()
	{
		return data[tail];
	}
	void pop()
	{
		head++;
	}
	void push_back(const int &x)
	{
		tail++;
		data[tail]=x;
	}
	void push_front(const int &x)
	{
		head--;
		data[head]=x;
	}
}qu;
int main()
{
	int n,p,cnt=0;
	while(cin>>p>>n)
	{
	    if (p==0&&n==0) return 0;
	    cnt++;
	    cout<<"Case "<<cnt<<":"<<endl;
		qu.init();
		for(int i=1;i<=min(p,1000);i++) 
		{
			qu.push_back(i);
			//cout<<i<<endl;
		}
		for(int i=1;i<=n;i++)
		{
			char c;
			cin>>c;
			if(c=='N') 
			{
				cout<<qu.front()<<endl;
				qu.push_back(qu.front());
				qu.pop();	
				continue;
			}
			if(c=='E')
			{
				int x;
				cin>>x;
				if(x>1000)
				{
					qu.push_front(x);
					//cout<<qu.front()<<endl;
					//qu.pop();	
				}
				else
				{
					for(int i=qu.head+1;i<=qu.tail;i++)
					{
							//cout<<"qu.data[i]="<<qu.data[i]<<endl;
							if(qu.data[i]==x)
							{
								for(int j=i;j>qu.head;j--)
								{
									qu.data[j]=qu.data[j-1];
								}
								qu.data[qu.head]=x;
								break;
							} 
					}
					//cout<<qu.front()<<endl;
					//qu.push_back(x);
					//qu.pop();
				}
			}
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值