CodeForces - 1200A
阿姆河有一家由10间客房组成的酒店。房间从左到右从0到9编号。
酒店有两个入口——一个从左端,另一个从右端。当顾客通过左入口到达酒店时,他们被分配到离左入口最近的一个空房间。同样,当顾客通过正确的入口到达酒店时,他们会被分配到离右入口最近的一个空房间。
有一天,阿木错了房间分配单。谢天谢地,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”,不带空格。
Input
8
LLRL1RL1
Output
1010000011
Input
9
L0L0LLRR9
Output
1100000010
(很有意思的一题)
步骤:
1.判断s[i],有三种情况"L",“R”,else(就是0到9)
2.输出room的数组
care:
1.检索到一个空房间,负值完1就break
2.if elseif else
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n; cin >> n; int i; int room[105] = {0};
string s; cin >> s;
for (i = 0; i < s.size(); i++)
{
if (s[i] == 'L')
{
for (int j= 0; j < 10; j++)
{
if (room[j] == 0) { room[j] = 1; break; }
}
}
else if (s[i] == 'R')
{
for (int j = 9; j >= 0; j--)
{
if (room[j] == 0) { room[j] = 1; break; }
}
}
else
{
room[s[i] - '0' ]=0;
}
}
for (i = 0; i < 10; i++)
cout << room[i];
return 0;
}

这篇博客解析了一道编程问题,讲述了如何根据顾客进出酒店的行为恢复房间分配。通过阅读和处理输入字符串,利用C++实现逻辑来重构房间状态。
633

被折叠的 条评论
为什么被折叠?



