125 周赛
第二题
第二题……没想到是直接乘,而不是排列选择。
py
n = int(input())
arr = list(map(int, input().split()))
arr.sort()
i,j,k = arr.count(arr[0]), arr.count(arr[1]), arr.count(arr[2])
if arr[0] == arr[1] == arr[2]:
print( i * (j-1) * (k-2) // 6 )
elif arr[0] == arr[1]:
print( i * (j - 1) * k // 2 )
elif arr[1] == arr[2]:
print(i * j * (k - 1) // 2 )
else:
print(i * j * k)
第三题
第三题,本以为我会,尝试后才发现没那么简单……
py
def rep():
a = list(map(int, input().split()))
return a
def solve():
n = int(input())
arr = rep()
# 下标做值,value 为删除该元素能增加的“有价值元素”的数量
val_2_maxAns = [-2] + [0] * n # 不存在 0 元素,所以元素是 -2
maxVal, secondMax = 0, 0
for i in arr:
if maxVal < i:
secondMax = maxVal
maxVal = i
val_2_maxAns[maxVal] = -1 # 因为该最大值是“用来”删除的,但删掉它后,本身会减去一个有价值元素,所以初始值是 -1
elif secondMax < i:
secondMax = i
# 当一个数字,小于前面的最大值,但大于前面的次大值时,意味着删除掉前面的最大值后,有价值元素能加1
val_2_maxAns[maxVal] += 1
# 根据题意,找到能增加最多的有价值元素的数量,存在多个元素时,只取最小的一个。
print(val_2_maxAns.index(max(val_2_maxAns)))
if __name__ == '__main__':
#for i in range(int(input())):
solve()