链表80pts求调
  • 板块P9518 queue
  • 楼主BYR_KKK
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/8/13 09:46
  • 上次更新2023/11/3 04:09:23
查看原帖
链表80pts求调
802664
BYR_KKK楼主2023/8/13 09:46

#include<bits/stdc++.h>
#define ll long long

using namespace std;

const int maxn=1e8+10;

map<string,bool>mp;
map<string,int>na;
map<int,string>it;

struct node{
	int pre;
	int nxt;
	int x;
}a[maxn];

int w[maxn];

signed main(){
	//ios::sync_with_stdio(false);
	//cin.tie(0);
	int n;
	cin>>n;
	int g1=-1,g2=-1;
	int cnt=0;
	int bi=0;
	for(int i=1;i<=n;i++) a[i].pre=i-1;
	for(int i=0;i<n;i++) a[i].nxt=i+1;
	a[n].nxt=1;
	a[1].pre=n;
	//a[0].pre=n;
	int mo=n,head=1;
	while(n--){
		string s;
		cin>>s;
		if(s=="arrive"){
			string ss;
			cin>>ss;
			if(mp[ss]) cout<<"Error\n";
			else {
				cout<<"OK\n";	
				mp[ss]=true;
				cnt++;
				if(na[ss]==0) na[ss]= ++bi,it[bi]=ss;
				a[a[mo].nxt].x=na[ss];
				a[a[mo].nxt].pre=mo;
				mo=a[mo].nxt;
				w[na[ss]]=mo;
				//a[mo].nxt=head;
				//a[head].pre=mo;
				//加入队列 
			}
		}
		if(s=="leave"){
			string ss;
			cin>>ss;
			if(!mp[ss]||g1==na[ss]||g2==na[ss])cout<<"Error\n";
			else {
				cout<<"OK\n";
				mp[ss]=false;
				cnt--;
				int wh=w[na[ss]];
				a[a[wh].pre].nxt=a[wh].nxt;
				a[a[wh].nxt].pre=a[wh].pre;
				if(wh==head) head=a[wh].nxt;
				if(mo==wh) mo=a[wh].pre;
				//退出队列 
			}
		}
		if(s=="start"){
			if(cnt==0) cout<<"Error\n";
			else {
				if(g1!=-1) {
					head=a[w[g1]].nxt;
					a[w[g1]].nxt=a[mo].nxt;
					a[mo].nxt=w[g1];
					a[w[g1]].pre=mo;
					
					mo=w[g1];
				}
				if(g2!=-1) {
					head=a[w[g2]].nxt;
					a[w[g2]].nxt=a[mo].nxt;
					a[mo].nxt=w[g2];
					a[w[g2]].pre=mo;
					
					mo=w[g2];
				}
				g1=a[head].x;
				//cout<<"&&"<<g1<<"&&"<<g2<<'\n';
				cout<<it[g1]<<' ';
				if(cnt==1) {
					g2=-1;
					cout<<'\n';
					continue;	
				}
				g2=a[a[head].nxt].x;
				cout<<it[g2]<<'\n';
				//a[mo].nxt=head;
				//a[head].pre=mo;
			}
		}
	}
	return 0;
}
2023/8/13 09:46
加载中...