初步代码(纠错):
n = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
C = list(map(int, input().split()))
# 胜利状态的函数编写:
def vic(name):
f = []
cnt = 0
s = 0
if name == 'x':
for i in range(n):
w = A[i] - B[i] - C[i]
f.append(w)
f.sort()
i = n
while i:
i -= 1
s += f[i]
if s <= 0:
return cnt
cnt += 1
if name == 'y':
for i in range(n):
w = B[i] - A[i] - C[i]
f.append(w)
f.sort()
i = n
while i:
i -= 1
s += f[i]
if s <= 0:
return cnt
cnt += 1
if name == 'z':
for i in range(n):
w = C[i] - A[i] - B[i]
f.append(w)
f.sort()
i = n
while i:
i -= 1
s += f[i]
if s <= 0:
return cnt
cnt += 1
X = vic('x')
Y = vic('y')
Z = vic('z')
if X == 0 and Y == 0 and Z == 0:
print(-1)
else:
print(max(X, Y, Z))
上面代码我只写了当Ai - Bi - Ci在下一个变化量达成 <= 0 的状态,忽略了当所有事件的贡献值之和始终为正( > 0 )时的情况,故而报错:unorderable types: NoneType > int
,花了我半小时时间去debug,sb了
故而有了下面这串修正代码,更简洁直观
import sys
n = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
C = list(map(int, input().split()))
all_equal = all(a == b == c for a, b, c in zip(A, B, C))
# 当所有Ai == Bi == Ci的情况
if all_equal:
print(-1)
sys.exit()
# 胜利状态的函数编写:
def vic(name):
f = []
if name == 'x':
for i in range(n):
f.append(A[i] - B[i] - C[i])
elif name == 'y':
for i in range(n):
f.append(B[i] - A[i] - C[i])
elif name == 'z':
for i in range(n):
f.append(C[i] - A[i] - B[i])
# 降序排序,替代逆序遍历
f.sort(reverse=True)
s = 0
cnt = 0
for val in f:
s += val
if s <= 0:
break
cnt += 1
return cnt # 确保始终返回整数
X = vic('x')
Y = vic('y')
Z = vic('z')
max_events = max(X, Y, Z)
print(max_events if max_events > 0 else -1) # 当cnt = 0时就是所有事件都无法达成三国中的任意一国胜出,所以直接输出-1就是了