我一直在学习计算机竞赛,当我正在研究一个看似微不足道的问题时,我遇到了一些意想不到的行为。我确定答案很简单,但对于我的生活,我无法理解。
问题是:https://dmoj.ca/problem/ccc14s1
这是我的计划:
import math
K = int(input())
m = int(input())
r_i = []
for i in range(m):
r_i.append(int(input()))
friends = [x+1 for x in range(K)]
print(r_i)
for j in r_i:
instances = int(math.floor(friends[-1] / j))
for k in range(instances):
friends[j*(k+1) - 1] = -1
for n in friends:
if(n != -1):
print(n)
问题是,在循环for j in r_i
一次之后,instances
的计算结果为-1。我发现删除行friends[j*(k+1) - 1] = -1
将解决问题但我无法理解为什么将值-1分配给friends
中的元素会影响instances
的值下一次迭代。
答案 0 :(得分:0)
从您给出的链接中获取样本输入:
10
2
2
3
在第一个循环中:
for j in r_i:
instances = int(math.floor(friends[-1] / j))
for k in range(instances):
friends[j*(k+1) - 1] = -1
您将friends
设置为
[1, -1, 3, -1, 5, -1, 7, -1, 9, -1]
^^
因此,在下一个循环中,当您尝试获取friends[-1]
时,您将获得上面指出的值。毫无疑问,它是-1
。
您应该在设置一次后清除所有-1
:
for j in r_i:
instances = int(math.floor(friends[-1] / j))
for k in range(instances):
friends[j*(k+1) - 1] = -1
friends = [i for i in friends if i != -1]