Skip to content

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()