#35. 搶票機器人

中等陣列模擬

時間限制 1000 ms ・ 記憶體限制 256 MB

題目描述

各位 K-pop 粉絲正擔心搶不到 AAA 的門票,而 Jason 也是其中之一。為了幫助 Jason 圓夢,他上脆跪求各位大大幫他打造一個搶票機器人,能精確地搶到他要的座位。

給定一個 N 列 M 行的演唱會場地座位表,列與行的編號都從 0 開始。接下來會有 Q 筆搶票紀錄,每筆紀錄 (U, V) 代表 Jason 成功搶到第 U 列第 V 行的座位。請輸出最終的座位表:被 Jason 搶到的座位標記 1,其餘(別人的座位或空位)標記 0

輸入格式

第一行一個整數 Q,代表搶票紀錄的筆數。 第二行兩個整數 N M,代表場地的列數與行數。 接下來 Q 行,每行兩個整數 U V,代表 Jason 搶到第 U 列第 V 行的座位。

限制

  • 1 ≤ N ≤ 1000
  • 1 ≤ M ≤ 1000
  • 1 ≤ Q ≤ 1000
  • 0 ≤ U < N,0 ≤ V < M
  • 同一個座位可能出現在不只一筆紀錄裡(重複搶到同一位置),結果仍視為 Jason 的座位

子任務

  • 子任務一(80 分):N = 1,開一維陣列就能解
  • 子任務二(20 分):無其他額外限制,需要開二維陣列

輸出格式

輸出 N 行,每行 M 個以空白分隔的整數,代表最終的座位表:1 代表 Jason 搶到的座位,0 代表別人的座位或空位。

範例一

範例輸入:

2
1 5
0 2
0 4

範例輸出:

0 0 1 0 1

場地有 1 列 5 行,初始值全是 0。

接著讀取兩筆紀錄:

  • 第一筆 (0, 2) → 把第 2 行座位標記為 1。
  • 第二筆 (0, 4) → 把第 4 行座位標記為 1。

因此整列座位的狀態依序是:

  • 第 0 行 → 0
  • 第 1 行 → 0
  • 第 2 行 → 1
  • 第 3 行 → 0
  • 第 4 行 → 1

最後輸出結果就是 0 0 1 0 1 。

範例二

範例輸入:

1
3 3
2 2

範例輸出:

0 0 0
0 0 0
0 0 1

這次場地有 3 列 3 行,所以我們需要建立一個二維陣列來表示座位表,初始值全部設為 0。

接著讀取一筆紀錄 (2, 2):

  • U = 2 代表第 2 列(注意列編號從 0 開始,所以這是最後一列)。
  • V = 2 代表第 2 行(同樣是最後一行)。

因此,Jason 搶到的是最後一列最後一行的座位。把這個位置標記為 1,其餘保持 0。

最後輸出整個座位表,所以最終輸出為:

  • 第 0 列:0 0 0
  • 第 1 列:0 0 0
  • 第 2 列:0 0 1

提示

列與行的編號都是從 0 開始,不是從 1 開始。

理解題目限制:

在這題中,列與行的編號都是從 0 開始,而不是從 1 開始。由於子任務一保證 N = 1,場地只有一列,因此不需要使用二維陣列,只要一維陣列就能表示所有座位。

首先,建立一個大小為 M 的一維陣列,例如 int seats[1111];,並將初始值全部設為 0。這個陣列的每個索引位置就代表第 0 列的某一個座位。

接著,讀取 Q 筆紀錄。每筆紀錄的格式是 (U, V),因為在子任務一中 U 一定是 0,所以只需要處理 V。當讀到某個座位 (0, V) 時,就把 seats[V] 設為 1,表示 Jason 搶到該座位。

最後,輸出整個陣列。使用迴圈依序印出每個元素,並在數字之間加上空白,就能得到最終的座位表。

配分方式

子題配分比對方式
子題 180完整輸出需完全正確
子題 220完整輸出需完全正確

範例測資

範例輸入 1

2
1 5
0 2
0 4

範例輸出 1

0 0 1 0 1

範例輸入 2

1
3 3
2 2

範例輸出 2

0 0 0
0 0 0
0 0 1
請先登入後再提交程式碼

討論與題解

載入討論區…