C++程式:檢查客人入住記錄後查詢房間狀態
假設我們有一個字串 S,其中包含 'L'、'R' 和數字 0 到 9。假設有一家酒店有 10 個房間,從左到右編號為 0 到 9。酒店有兩個入口——一個在左側,另一個在右側。當顧客從左側入口進入酒店時,他們會得到最靠近左側入口的空房間。類似地,當顧客從右側入口進入酒店時,他們會得到最靠近右側入口的空房間。但我們丟失了房間分配列表。但我們記得所有顧客:顧客何時到達、從哪個入口到達以及何時離開酒店。最初酒店是空的。我們必須從記憶中恢復房間分配列表。在 S 中,'L' 表示顧客從左側入口進入,如果為 'R',則表示他/她從右側入口進入,數字 d 表示顧客離開房間 d。我們必須返回房間狀態。一個長度為 10 的字串,其中 0 表示房間為空,否則表示房間已佔用。
因此,如果輸入類似於 S = "LLRL1RL1",則輸出將為 "1010000011",因為
首先,所有房間都是空的。狀態 0000000000。
- L - 顧客從左側入口進入酒店。狀態 1000000000。
- L - 來自左側入口的顧客。狀態 1100000000。
- R - 來自右側入口的顧客。狀態 1100000001。
- L - 來自左側入口的顧客。狀態 1110000001。
- 1 - 房間 1 的顧客離開。狀態 1010000001。
- R - 來自右側入口的顧客。狀態 1010000011。
- L - 來自左側入口的顧客。狀態 1110000011。
- 1 - 房間 1 的顧客離開。狀態 1010000011。
步驟
為了解決這個問題,我們將遵循以下步驟:
n := size of S a := "0000000000" for initialize i := 0, when i < n, update (increase i by 1), do: if S[i] is same as 'L', then: set left most 0 in a to 1 if S[i] is same as 'R', then: set right most 0 in a to 1 Otherwise set S[i]th place in a to 0 return a
示例
讓我們看看以下實現以更好地理解:
#include <bits/stdc++.h> using namespace std; string solve(string S) { int n = S.size(); string a = "0000000000"; for (int i = 0; i < n; i++) { if (S[i] == 'L') a[a.find('0')] = '1'; if (S[i] == 'R') a[a.rfind('0')] = '1'; else a[S[i] - '0'] = '0'; } return a; } int main() { string S = "LLRL1RL1"; cout << solve(S) << endl; }
輸入
"LLRL1RL1"
輸出
1010000011
廣告