// UVa 11100 - The Trip, 2007 #include <iostream> #include <algorithm> #include <queue> using namespace std; #define datatype unsigned long long int struct pa { datatype b; int c; }; bool operator <(pa x, pa y) { return x.c < y.c || x.c == y.c && x.b > y.b; } int main() { int n; bool first = true; while (cin >> n && n > 0) { datatype a[10000]; for (int i = 0; i < n; i++) cin >> a[i]; sort(a, a + n); priority_queue<pa> q; pa p; p.b = a[0]; p.c = 1; for (int i = 1; i < n; i++) { if (a[i] != a[i - 1]) { q.push(p); p.b = a[i]; p.c = 1; } else p.c++; } q.push(p); int sol = q.top().c; if (first) first = false; else cout << endl; cout << sol << endl; int nn = n; for (int j = sol; j >= 1; j--) { int mx = nn / j + ((nn % j > 0) ? 1 : 0); bool f = true; int z = 0; priority_queue<pa> r; while (!q.empty()) { pa p = q.top(); q.pop(); if (f) { cout << p.b; f = false; } else cout << " " << p.b; p.c--; if (p.c) r.push(p); z++; if (z == mx) break; } nn -= z; cout << endl; while (!r.empty()) { q.push(r.top()); r.pop(); } } } return 0; }
Friday, November 13, 2015
UVa 11100 - The Trip, 2007
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment