当前位置: 代码迷 >> 综合 >> 1013. 医疗调度系统
  详细解决方案

1013. 医疗调度系统

热度:44   发布时间:2023-12-06 11:29:13.0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
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;
}