蓝桥杯3518 三国游戏 | 排序
题目传送门
这题的思路很巧妙,需要算出每个事件给三国带来的净贡献(即本国士兵量减其他两国士兵量)并对其排序,根据贪心的原理累加贡献量直到累加结果不大于0。最后对三国的胜利的最大事件数排序取最值即可。
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
c = list(map(int, input().split()))
# 三国的净士兵量
x = []
y = []
z = []
for i in range(0, n):
x.append(a[i]-b[i]-c[i])
y.append(b[i]-c[i]-a[i])
z.append(c[i]-b[i]-a[i])
sorted_x = sorted(x,reverse=True)
sorted_y = sorted(y,reverse=True)
sorted_z = sorted(z,reverse=True)
sum_x, sum_y, sum_z, cntx, cnty, cntz = 0, 0, 0, 0, 0, 0
for i in range(0, n):
sum_x += sorted_x[i]
sum_y += sorted_y[i]
sum_z += sorted_z[i]
if sum_x > 0:
cntx = i+1
if sum_y > 0:
cnty = i+1
if sum_z > 0:
cntz = i+1
res = max(cntx, cnty, cntz)
if res == 0:
print(-1)
else:
print(res)
END✨