สมมติว่าเราได้รับกล่องกริดขนาด ม. x น. โดยที่แต่ละเซลล์มีบอร์ดที่วางตำแหน่งจากมุมบนขวาไปซ้ายล่างสุด หรือจากด้านบนซ้ายไปขวาล่าง จากเซลล์ด้านบนสุด ลูกบอลถูกใส่เข้าไปในกล่อง และเราต้องตรวจสอบว่าลูกบอลนั้นไปถึงด้านล่างของกล่องหรือไม่ ตารางจะถูกกำหนดเป็นเมทริกซ์ หากเซลล์ถูกทำเครื่องหมาย 1 แผ่นกระดานแนวทแยงจะขยายจากด้านซ้ายบนไปยังด้านขวาล่าง หากมีเครื่องหมาย -1 จะขยายจากมุมบนขวาไปยังมุมล่างซ้าย หากใส่ลูกบอลเข้าไปในกล่อง n ลูก เราต้องหาว่าลูกลงไปถึงด้านล่างกี่ลูก
ตัวอย่างช่องตาราง 3x3
ดังนั้นหากอินพุตเป็นเหมือน mat =
1 | 1 | 1 | -1 |
-1 | 1 | 1 | -1 |
1 | -1 | -1 | 1 |
1 | -1 | 1 | -1 |
จากนั้นผลลัพธ์จะเป็น [-1, -1, -1, -1]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
i :=จำนวนแถวใน mat
-
j :=จำนวนคอลัมน์ใน mat
-
res :=รายการใหม่
-
สำหรับค่าที่อยู่ในช่วง 0 ถึง j ให้ทำ
-
x :=วาล
-
สำหรับ r ในช่วง 0 ถึง i ให้ทำ
-
s :=mat[r, x]
-
x :=x + mat[r, x]
-
ถ้า x <0 หรือ x>=j หรือ mat[r, x] ไม่เหมือนกับ s แล้ว
-
เพิ่มองค์ประกอบ -1 ที่ส่วนท้ายของ res
-
ออกจากวง
-
-
-
มิฉะนั้น
-
เติม x ต่อท้าย res
-
-
-
ผลตอบแทน
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น
def solve(mat): i, j = map(len, (mat, mat[0])) res = [] for val in range(j): x = val for r in range(i): s = mat[r][x] x += mat[r][x] if x < 0 or x >= j or mat[r][x] != s: res += [-1] break else: res += [x] return res print(solve([[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]))
อินพุต
[[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]
ผลลัพธ์
[-1, -1, -1, -1]