https://codeforces.com/problemset/problem/1316/A
#include <bits/stdc++.h>
using namespace std;
//typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int tc;
cin >> tc;
while (tc--) {
int n, m, sum = 0;
cin >> n >> m;
vector<int> v;
for (int i = 0; i < n; i++)
{
int s;
cin >> s;
sum += s;
v.push_back(s);
}
if (m > sum)
cout << sum << endl;
else
cout << m << endl;
}
return 0;
}
> 학생 1의 점수를 최대한 올리고, 나머지 학생들의 점수를 최대한 낮춰야 한다. 이때 조건이 있는데,
점수들을 변경한 이후의 모든 학생들의 점수의 합은 점수를 변경하기 전의 모든 학생들의 점수의 합과 같아야 한다.
(문제 조건 : The average score of the class doesn't change. 참고). 그래야 점수의 평균이 같기 때문이다.
> m (올릴 수 있는 점수의 최대값) 이 sum (점수 변경 전의 모든 학생들의 점수의 합) 을 넘어버리면, 나머지 모든 학생들의 점수들을 모두 0점으로 해도 sum을 넘어버리므로, 그럴 땐 학생 1의 점수의 최대값을 m으로 하면 안되고, sum으로 해야한다.
> 만약 m이 sum보다 작으면 학생 1의 점수의 최대값을 m으로 설정해도 된다.
'Problem Solving > 코드포스' 카테고리의 다른 글
[코드포스] 129A : Cookies (0) | 2020.08.07 |
---|---|
[코드포스] 1283B : Candies Division (0) | 2020.07.06 |
[코드포스] 822A : I'm bored with life (0) | 2020.07.02 |
[코드포스] 1374A : Required Remainder (0) | 2020.06.30 |