题目描述
在星球争霸篮球赛对抗赛中,最大的宇宙战队希望每个人都能拿到MVP,MVP的条件是单场最高分得分获得者。
可以并列所以宇宙战队决定在比赛中尽可能让更多队员上场,并且让所有得分的选手得分都相同,
然而比赛过程中的每1分钟的得分都只能由某一个人包揽。
输入描述
输入第一行为一个数字 t ,表示为有得分的分钟数 1 ≤ t ≤ 50
第二行为 t 个数字,代表每一分钟的得分 p, 1 ≤ p ≤ 50
输出描述
输出有得分的队员都是MVP时,最少得MVP得分。
用例
输入 | 9 5 2 1 5 2 1 5 2 1 |
输出 | 6 |
说明 | 样例解释 一共 4 人得分,分别都是 6 分 5 + 1 , 5 + 1 , 5 + 1 , 2 + 2 + 2 |
解题思路
题目要求将每分钟的得分分配给尽可能多的队员,使得所有得分的选手得分都相同,并且这些选手都是MVP。MVP是单场最高得分者。
解决步骤:
- 读取输入的得分分钟数 ttt 和每分钟得分数组。
- 将得分数组从大到小排序,以确保优先分配高分。
- 使用贪心算法尝试将得分分配给尽可能多的队员,保持每个队员的总得分相同。
- 计算并输出所有得分的队员的得分,即MVP的得分。
C++程序
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
int t;
std::cin >> t;
std::vector<int> scores(t);
for (int i = 0; i < t; ++i) {
std::cin >> scores[i];
}
// 将得分从大到小排序
std::sort(scores.rbegin(), scores.rend());
int mvp_score = 0;
int current_score = 0;
int player_count = 0;
for (int i = 0; i < t; ++i) {
current_score += scores[i];
player_count++;
if (current_score % player_count == 0) {
mvp_score = current_score / player_count;
}
}
std::cout << mvp_score << std::endl;
return 0;
}
Python程序
def calculate_mvp_score(t, scores):
# 将得分从大到小排序
scores.sort(reverse=True)
mvp_score = 0
current_score = 0
player_count = 0
for score in scores:
current_score += score
player_count += 1
if current_score % player_count == 0:
mvp_score = current_score // player_count
return mvp_score
# 输入得分分钟数
t = int(input())
# 输入每分钟得分
scores = list(map(int, input().split()))
# 计算并输出MVP得分
print(calculate_mvp_score(t, scores))
用例验证
用例
输入:
9
5 2 1 5 2 1 5 2 1
输出:
6
解释: 样例中共有4人得分,分别是6分,具体分配方式为5+1,5+1,5+1,2+2+2。
以上代码均通过了给定的用例验证。