A. Hotelier
【中文翻译版】
Amugae酒店拥有10间客房。客房从左到右依次为0到9。
酒店有两个入口 - 一个来自左端,另一个来自右端。当顾客通过左入口到达酒店时,他们被分配到最靠近左入口的空房间。类似地,当顾客通过右入口到达酒店时,他们被分配到最靠近右入口的空房间。
有一天,Amugae失去了房间分配清单。值得庆幸的是,Amugae的记忆非常完美,他记得所有顾客:当顾客到达时,从哪个入口到他们离开酒店。最初酒店是空的。编写一个程序,从Amugae的记忆中恢复房间分配列表。
输入
第一行由整数n(1≤n≤105)组成,是Amugae记忆中的事件数。
第二行包含一个长度为n的字符串,按时间顺序描述事件。每个字符代表:
‘L’:顾客从左入口到达。
‘R’:客户从右入口到达。
‘0’,‘1’,…,‘9’:房间x(分别为0,1,…,9)的客户离开。
当客户到达时,保证至少有一个空房间,并且当给出x(0,1,…,9)时,房间x中有客户。此外,所有房间最初都是空的。
输出
在唯一的一行,输出酒店房间的分配状态,从0号房间到9号房间。代表空房间为“0”,占用房间为“1”,没有空格。
CASE_1
输入
8
LLRL1RL1
输出
1010000011
CASE_2
输入
9
L0L0LLRR9
输出
1100000010
思路
简单的模拟题
放代码
#include<iostream>
#include<vector>
using namespace std;
int a[10];
void l(void){
for(int i=0;i<10;i++){
if(a[i]==0){a[i]=1;
break;
}
}
}
void r(void){
for(int i=9;i>=0;i--){
if(a[i]==0){a[i]=1;
break;
}
}
}
int main(){
int n,nu;
char po;
cin>>n;
for(int i=0;i<n;i++){
cin>>po;
if(po=='L')l();
if(po=='R')r();
if(int(po)>=48&&int(po)<=57)nu=int(po)-'0',a[nu]=0;
}
for(int i=0;i<10;i++)cout<<a[i];
return 0;
}
只不过速度有点慢…