최대를 바로 확인할수 있는 SET하나 최소를 바로 확인할 수 있는 SET하나를 가지고 있는다.(원소가 중복될 수 있으므로 Multiset 을 사용)
평탄화를 더이상 진행할 수 없을 조건을 검사해주고 평탄화를 계속 반복한다.
평탄화 작업은 첫번째 원소를 erase, insert 해주며 쉽게 처리할 수 있다.
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
for (int t = 1; t <= 10; t++) {
multiset<int>s, e;//최소 최대
int n; cin >> n;
for (int i = 0; i < 100; i++) {
int x; cin >> x;
s.insert(x); e.insert(-x);
}
while (n--) {
if (-*e.begin() - *s.begin() <= 1) break;
int tmp = *e.begin();
e.erase(e.begin());
e.insert(tmp + 1);
tmp = *s.begin();
s.erase(s.begin());
s.insert(tmp + 1);
}
cout << "#" << t << " " << -*e.begin() - *s.begin() << "\n";
}
return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
for (int t = 1; t <= 10; t++) {
vector<int> v;
int n; cin >> n;
for (int i = 0; i < 100; i++) {
int x; cin >> x;
v.push_back(x);
}
sort(v.begin(), v.end());
while (n--) {
if (*v.rbegin() - *v.begin() <= 1) break;
*v.rbegin() -= 1;
*v.begin() += 1;
sort(v.begin(), v.end());
}
cout << "#" << t << " " << *v.rbegin() - *v.begin() << "\n";
}
return 0;
}