Submission #329106

#TimeUsernameProblemLanguageResultExecution timeMemory
329106thecodingwizardTeams (CEOI11_tea)C++11
50 / 100
2415 ms25552 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define ii pair<int, int> #define f first #define s second #define pb push_back #define mp make_pair #define all(x) x.begin(), x.end() #define F0R(i, n) for (int i = 0; i < n; i++) #define FOR(i, a, b) for (int i = a; i < b; i++) #define inf 1000000010 int main() { cin.tie(0)->sync_with_stdio(0); int n; cin >> n; vector<ii> A; F0R(i, n) { int x; cin >> x; A.pb(mp(x,i+1)); } sort(all(A)); int teams = 1; vector<int> breakpoints; for (int i = 0; i < n-A.back().f; i++) { int curSz = 1; while (curSz < A[i].f && i+1 < n-A.back().f) { curSz++; i++; } if (curSz >= A[i].f) { teams++; breakpoints.pb(i); } } breakpoints.pb(n-1); for (int i = breakpoints.size()-2; ~i; i--) { int j; for (j = breakpoints[i+1]-A[breakpoints[i+1]].f; ; j--) { if (j-(i==0?-1:breakpoints[i-1]) >= A[j].f) break; } breakpoints[i] = j; } for (int i = 0; i < (int)breakpoints.size()-1; i++) { while (breakpoints[i]-(i==0?-1:breakpoints[i-1]) > breakpoints[i+1]-breakpoints[i]) { breakpoints[i]--; } } cout << teams << endl; int curIdx = 0; for (int x : breakpoints) { cout << x - curIdx + 1; for (; curIdx <= x; curIdx++) cout << " " << A[curIdx].s; cout << endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...