1001.Grid Illumination(网格照明)

Description

On a N x N grid of cells, each cell (x, y) with 0 <= x < N and 0 <= y < N has a lamp.

Initially, some number of lamps are on. lamps[i] tells us the location of the i-th lamp that is on. Each lamp that is on illuminates every square on its x-axis, y-axis, and both diagonals (similar to a Queen in chess).

For the i-th query queries[i] = (x, y), the answer to the query is 1 if the cell (x, y) is illuminated, else 0.

After each query (x, y) [in the order given by queries], we turn off any lamps that are at cell (x, y) or are adjacent 8-directionally (ie., share a corner or edge with cell (x, y).)

Return an array of answers. Each value answer[i] should be equal to the answer of the i-th query queries[i].


N x N 的网格上,每个单元格 (x, y) 上都有一盏灯,其中 0 <= x < N0 <= y < N

最初,一定数量的灯是亮着的。lamps[i] 告诉我们亮着的第 i 盏灯的位置。每盏灯都照亮其所在 x 轴、y 轴和两条对角线上的每个正方形(类似于国际象棋中的皇后)。

对于第 i 次查询 queries[i] = (x, y),如果单元格 (x, y) 是被照亮的,则查询结果为 1,否则为 0 。

在每个查询 (x, y) 之后 [按照查询的顺序],我们关闭位于单元格 (x, y) 上或其相邻 8 个方向上(与单元格 (x, y) 共享一个角或边)的任何灯。

返回答案数组 answer。每个值 answer[i] 应等于第 i 次查询 queries[i] 的结果。

题目链接:https://leetcode.com/problems/grid-illumination/

Difficulty: hard

Example 1:

输入:N = 5, lamps = [[0,0],[4,4]], queries = [[1,1],[1,0]]
输出:[1,0]
解释: 
在执行第一次查询之前,我们位于 [0, 0] 和 [4, 4] 灯是亮着的。
表示哪些单元格亮起的网格如下所示,其中 [0, 0] 位于左上角:
1 1 1 1 1
1 1 0 0 1
1 0 1 0 1
1 0 0 1 1
1 1 1 1 1
然后,由于单元格 [1, 1] 亮着,第一次查询返回 1。在此查询后,位于 [0,0] 处的灯将关闭,网格现在如下所示:
1 0 0 0 1
0 1 0 0 1
0 0 1 0 1
0 0 0 1 1
1 1 1 1 1
在执行第二次查询之前,我们只有 [4, 4] 处的灯亮着。现在,[1, 0] 处的查询返回 0,因为该单元格不再亮着。

Note:

  • 1 <= N <= 10^9
  • 0 <= lamps.length <= 20000
  • 0 <= queries.length <= 20000
  • lamps[i].length == queries[i].length == 2

分析

  • updating(我觉得题目有问题,下面是我当时提交的代码,但是没有通过,手动验证测试用例,我觉得我没错[苦笑])

参考代码

class Solution(object):
def gridIllumination(self, N, lamps, queries):
    answer=[]
    def get(a,b,x,y):
        if(a==x or b==y):
            return True
        if(abs(a-x)==abs(b-y)):
            return True
        return False
    for query in queries:
        judge=False
        for lamp in lamps:
            if(get(lamp[0],lamp[1],query[0],query[1])):
                lamps.remove(lamp)
                if(not judge):
                    judge=True
        if(judge):
            answer.append(1)
        else:
            answer.append(0)
    return answer
-------------本文结束你这么美,还坚持读完了-------------