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

更新於: 2022年3月4日

279 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告