任务:
第一行包含数字
N
和M
(1 ≤ N,M ≤ 103) - 开发人员下跳棋的棋盘的尺寸。每个场地都有自己的颜色,黑色或白色。保证坐标为(1,1)的场地是黑色。还保证与黑色区域共享边界的区域将为白色,与白色区域共享边界的区域将为黑色。下一行包含一个数字
w
——场上白色棋子的数量。接下来的 w 行包含两个整数i
,j
(1 ≤ i ≤ N, 1 ≤ j ≤ M)表示白色棋子所在的格子。下一行包含一个数字b
——场上的黑色棋子的数量。以下b
几行用黑色棋子定义区域,就像白色棋子一样。保证每种颜色的棋子数量都是正整数,且 2 ≤ w + b ≤ (NM + 1) / 2 。保证所有棋子均位于黑色方格上。最后一行输入表示由谁来走:
white
如果是白棋,则为black
;如果是黑棋,则为 。
任务看似简单,我开始迎头解决——把条件写下来。事实证明并非所有测试都通过。我找不到算法出错的放置选项。
我的代码:
N, M = map(int, input().split())
w = int(input())
w_coord = [list(map(int, input().split())) for i in range(w)]
b = int(input())
b_coord = [list(map(int, input().split())) for i in range(b)]
move = input()
def moving(arr1, arr2, N, M):
for i in range(len(arr1)):
if (((([arr1[i][0] + 1, arr1[i][1] + 1] in arr2) and
([arr1[i][0] + 2, arr1[i][1] + 2] not in arr2) and
([arr1[i][0] + 2, arr1[i][1] + 2] not in arr1) and
((arr1[i][0] + 2 <= N) and (arr1[i][1] +2 <= M))) or
(([arr1[i][0] - 1, arr1[i][1] + 1] in arr2) and
([arr1[i][0] - 2, arr1[i][1] + 2] not in arr2) and
([arr1[i][0] - 2, arr1[i][1] + 2] not in arr1 ) and
((arr1[i][0] - 2 <= N) and (arr1[i][1] + 2 <= M)))) or
(((([arr1[i][0] - 1, arr1[i][1] - 1] in arr2) and
([arr1[i][0] - 2, arr1[i][1] - 2] not in arr2) and
([arr1[i][0] - 2, arr1[i][1] - 2] not in arr1) and
((arr1[i][0] - 2 <= N) and (arr1[i][1] - 2 <= M))) or
(([arr1[i][0] + 1, arr1[i][1] - 1] in arr2) and
([arr1[i][0] + 2, arr1[i][1] - 2] not in arr2) and
([arr1[i][0] + 2, arr1[i][1] - 2] not in arr1) and
((arr1[i][0] + 2 <= N) and (arr1[i][1] - 2 <= M)))))):
return 'Yes'
return 'No'
if move == 'white':
print(moving(w_coord, b_coord, N, M))
else:
print(moving(b_coord, w_coord, N, M))