有多少个车可以躲在有阻挡器的棋盘上?
How many rooks can hide on a chess board with blockers?
给你一个 m * n 的棋盘(其中 m≤n≤50 ),其中有 x 个格子。我们知道被封锁的细胞在哪里,我们知道它们的确切位置。
你的工作是提供你可以在棋盘上放置的车的最大数量,这样就不会有 2 个车互相攻击。
任何伪代码甚至任何语言的代码都会有所帮助。
输入输出样本:
在3*3的棋盘中,
x = 3
已阻止的单元格:
(0, 0),
(0, 1),
(0, 2)
答案 = 2
- 在每列的最后一行之后添加一个拦截器。
- 先按列再按行对阻止程序进行排序。
- 添加一个数组,其中包含每列中第一个拦截器的索引。
- 对于每一行,在每个自由伸展中找到具有最近阻塞物的未使用列(如果有多个候选者,任何一个都可以)。
- 在那里放置塔并标记为已使用。
- 推进遇到块的所有列并将列标记为可用。
总而言之,算法应该 运行 在 O(n * m + x * log(x)).
给你一个 m * n 的棋盘(其中 m≤n≤50 ),其中有 x 个格子。我们知道被封锁的细胞在哪里,我们知道它们的确切位置。
你的工作是提供你可以在棋盘上放置的车的最大数量,这样就不会有 2 个车互相攻击。
任何伪代码甚至任何语言的代码都会有所帮助。
输入输出样本:
在3*3的棋盘中,
x = 3
已阻止的单元格: (0, 0), (0, 1), (0, 2)
答案 = 2
- 在每列的最后一行之后添加一个拦截器。
- 先按列再按行对阻止程序进行排序。
- 添加一个数组,其中包含每列中第一个拦截器的索引。
- 对于每一行,在每个自由伸展中找到具有最近阻塞物的未使用列(如果有多个候选者,任何一个都可以)。
- 在那里放置塔并标记为已使用。
- 推进遇到块的所有列并将列标记为可用。
总而言之,算法应该 运行 在 O(n * m + x * log(x)).