#include <bits/stdc++.h>
using namespace std;
int INT() {
int in; scanf("%d", &in);
return in;
}
int main() {
int n=INT();
vector <int> a(n+1, 0), amount(n+1, 0);
for(int i=0; i<n; ++i) ++a[INT()];
for(int &x : a) if(x) ++amount[x];
deque <int> dq;
for(int i=1; i<=n; ++i) while(amount[i]) dq.push_back(i), --amount[i];
int ans=0;
while(!dq.empty()) {
++ans;
int to_pair=dq.back()-1;
dq.pop_back();
while(to_pair && !dq.empty()) {
int x=dq.front();
dq.pop_front();
if(x<=to_pair) to_pair-=x;
else dq.push_front(x-to_pair), to_pair=0;
}
}
printf("%d\n", ans);
exit(0);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include <bits/stdc++.h> using namespace std; int INT() { int in; scanf("%d", &in); return in; } int main() { int n=INT(); vector <int> a(n+1, 0), amount(n+1, 0); for(int i=0; i<n; ++i) ++a[INT()]; for(int &x : a) if(x) ++amount[x]; deque <int> dq; for(int i=1; i<=n; ++i) while(amount[i]) dq.push_back(i), --amount[i]; int ans=0; while(!dq.empty()) { ++ans; int to_pair=dq.back()-1; dq.pop_back(); while(to_pair && !dq.empty()) { int x=dq.front(); dq.pop_front(); if(x<=to_pair) to_pair-=x; else dq.push_front(x-to_pair), to_pair=0; } } printf("%d\n", ans); exit(0); } |
English