# 在 N x N 的网格上,每个单元格 (x, y) 上都有一盏灯,其中 0 <= x < N 且 0 <= 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] 的结果。
#
# 示例:
# 输入: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,因为该单元格不再亮着。
#
import random
# # 单元格行列
# n = 6
# # 开的灯的位置
# lamp = [[1, 3], [4, 5]]
# # 开的灯的位置
# queries = [[3, 2], [0, 4]]
#随机生成3个变量
n = 10
lamp = []
queries = []
lamp_length = 2
for i in range(0,lamp_length):
lampitem_list= []
lampitem_list.append(random.randint(0,n-1))
lampitem_list.append(random.randint(0,n-1))
lamp.append(lampitem_list)
print("lamp=",end="")
print(lamp)
queries_length = 3
for i in range(0,queries_length):
queriesitem_list= []
queriesitem_list.append(random.randint(0,n-1))
queriesitem_list.append(random.randint(0,n-1))
queries.append(queriesitem_list)
print("queries=",end="")
print(queries)
# 开的灯的位置
answer = []
arr = []
def init_lamp(lamp):
print("--------------------------------------")
#
lamp_i = []
lamp_j = []
#
for index, item in enumerate(lamp):
lamp_i.append(item[0])
lamp_j.append(item[1])
for i in range(0, n):
arr_item = []
for j in range(0, n):
# 判断斜对角
xie_isTrue = False
for index_item in lamp:
x = abs(index_item[0] - i)
y = abs(index_item[1] - j)
if x == y:
xie_isTrue = True
break
if lamp_i.count(i) > 0 or lamp_j.count(j) > 0 or xie_isTrue:
arr_item.append("*")
else:
arr_item.append(" ")
print(arr_item)
arr.append(arr_item)
def method_name(queries):
# 先判断此处灯是不是关的
for queries_item in queries:
if arr[queries_item[0]][queries_item[1]] == "*":
# 如果是开着的,那么answer返回1,同时关灯
answer.append("1")
else:
answer.append("0")
#
queries_i = []
queries_j = []
# 关灯位置数组
close_lamp = []
#
for index, item in enumerate(queries):
queries_i.append(item[0])
queries_j.append(item[1])
for i in range(0, n):
arr_item = []
for j in range(0, n):
xie_isTrue = False
for index_item in queries:
x = abs(index_item[0] - i)
y = abs(index_item[1] - j)
if x == y:
xie_isTrue = True
break
if queries_i.count(i) > 0 or queries_j.count(j) > 0 or xie_isTrue:
# 满足条件的
close_lamp.append([i, j])
# 将关灯区域的灯关掉
for item_lamp in lamp:
if close_lamp.count(item_lamp) > 0:
lamp.remove(item_lamp)
init_lamp(lamp)
init_lamp(lamp)
method_name(queries)
print(answer)
在 N x N 的网格上,每个单元格 (x, y) 上都有一盏灯
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...