10pts ACRETLEWA全都有
  • 板块P9518 queue
  • 楼主_8008008
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/8/12 19:46
  • 上次更新2023/11/3 04:13:24
查看原帖
10pts ACRETLEWA全都有
803885
_8008008楼主2023/8/12 19:46
#include<iostream>
#include<string>
#define N 100000
using namespace std;
bool cmp(string a,string b){//b是否为a的前缀 
	for(int i=0;i<b.length();i++)if(a[i]!=b[i])return false;return true;
}
string a[N];int len=0;
void del(int a1){//O(n)的删除 
	for(int i=a1;i<len;i++)a[i]=a[i+1];len--; 
}
void in(string a1){//O(1)的入栈 
	a[len]=a1;len++;
}
int main(){
	int n;string u1="",u2="",b;cin>>n;getline(cin,b);//搞掉换行符  
	while(n--){
		getline(cin,b);
		if(b=="start"){
			if(len==0){
				cout<<"Error\n";
			}else{
				if(u1!=""){in(u1);del(0);}
				if(u2!=""){in(u2);del(0);}
				if(len==1)u1=a[0],u2="";
				else u1=a[0],u2=a[1];
				cout<<u1;
				if(u2!="")cout<<" "<<u2;cout<<endl;
			}
		}else if(cmp(b,"arrive")){
			string c="";bool flag=1;
			for(int i=7;i<b.length();i++)c+=b[i];
			for(int i=0;i<len;i++)if(a[i]==c)flag=0;
			if(flag){in(c);cout<<"OK\n";}else cout<<"Error\n";
		}else if(cmp(b,"leave")){
			string c="";
			for(int i=6;i<b.length();i++)c+=b[i];
			if(u1==c||u2==c)cout<<"Error\n";
			else{bool f=1;for(int i=0;i<len;i++)if(a[i]==c){del(i);cout<<"OK\n";f=0;break;}if(f)cout<<"Erorr\n";}
		}
	}
	return 0;
}
2023/8/12 19:46
加载中...