電影院座位編排(Python)


提交答案

分數: 100
時間限制: 1.0s
記憶體限制: 256M

作者:
題目類型
允許的語言
Python

問題簡述:

  新冠肺炎讓電影院業者的生意大受影響。因應逐漸解封,電影院推出兩階段售票策略。

首先,VIP家庭客戶可優先訂購劃位,因此這些劃位可能會有相鄰的狀況。

當VIP家庭客戶訂購期限已過,開始銷售一般客戶劃位,此時任何兩人不能左右或前後比鄰而坐,也就是俗稱的梅花座

假設VIP家庭客戶已經完成劃位,設計劃位判斷功能,為一般客戶計算當下還有多少可能座位可以選擇。

如上左圖的X是VIP家庭客戶已經劃位的區域,右圖的則是現在可以劃位的位置

因此這個例子中,可以選擇的座位數量是17

請完成此程式中函式SeatChecked(),讀入每個座位座標後(左上角起點是(0, 0)),回傳01來判斷此座位是否可以劃位,0代表不可劃位,1代表可劃位。

例如此題中座位(1, 3)則傳回1、座位(2, 3)傳回0、座位(2, 1)傳回0

輸入格式:

  • R,C: 座位區域的長與寬
  • n: VIP預定座位數
  • S11, … S12 : 第一個預定座位座標

...

  • Sn1, … Sn2 :第n個預定座位座標

輸出格式:

  • num目前可選擇劃位的座位數量

需要完成及繳交的函式:

def SeatChecked(R, C, VIPSeats, Seat)函式

  • R座位區域有幾列
  • C每列有幾個座位
  • VIPSeatsVIP預定座位坐標
  • Seat讀入座位坐標
  • 此函式判斷讀入座位是否可以劃位,可以劃位回傳1,不可劃位回傳0
def SeatChecked(R, C, VIPSeats, Seat):
    #請完成並繳交本函式

程式樣板:

def SeatChecked(R, C, VIPSeats, Seat):
    #你的程式碼


if __name__ == '__main__':

    VIPSeats=[]
    R = int(input())
    C = int(input())
    n = int(input())

    for k in range(n):
        try:
            VIPSeats.append(list(map(int, input().rstrip().split())))
        except EOFError:
            break

    num = 0
    for i in range(R):
        for j in range(C):
            check =[i,j]
            check = SeatChecked(R, C, VIPSeats, check)
            if check==1:
                num+=1
    print(num)

範例測資:

測資1

輸入

6
6
5
2 1
2 2
4 0
4 1 
4 4

輸出

17

測資2

輸入

10
8
5
2 3
4 2
4 3
7 3
7 4

輸出

60

測資3

輸入

7
6
3
1 2
3 2
5 0

輸出

29

測資4

輸入

8
8
5
1 0
1 1
1 2
3 1
4 3

輸出

45

測資5

輸入

9
10
6
2 0
2 1
4 2
4 3
5 5
5 6

輸出

67

留言

目前沒有評論。