본문 바로가기
Problem Solving/코드포스

[코드포스] 1316A : Grade Allocation

by shinbian11 2020. 7. 1.

https://codeforces.com/problemset/problem/1316/A

 

Problem - 1316A - Codeforces

 

codeforces.com


#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으로 설정해도 된다.