제출 #441764

#제출 시각아이디문제언어결과실행 시간메모리
441764YuisuyunoJob Scheduling (CEOI12_jobs)C++14
70 / 100
526 ms40648 KiB
//Nguyen Huu Hoang Minh #include <bits/stdc++.h> #define pb push_back #define fi first #define se second #define N 1000001 #define ii pair<int, int> #define vi vector<int> #define int long long using namespace std; const int minf = -1e10; vector<int> res[100012]; int n, m, d; bool ok(int machine, vector<ii> a){ int delays=0; int en[machine] = {0}; for(int i=0, cur=0; i<m; i++, cur++){ if (cur==machine) cur=0; if (en[cur] + 1 > a[i].fi){ en[cur]++; delays = max(delays,en[cur]-a[i].fi); } else en[cur] = a[i].fi; } return delays <= d; } signed main() { vector<ii> a; cin >> n >> d >> m; a.resize(m); for(int i=0; i<m; i++){ cin >> a[i].fi; a[i].se = i+1; } sort(a.begin(),a.end()); int l = 0, r = m; int ans; while (r-l > 0){ int mid = (l+r)/2; if (ok(mid,a)){ ans = mid; r = mid-1; } else l = mid+1; } cout<<ans<<'\n'; int en[ans] = {0}; for(int i=0, cur=0; i<m; i++, cur++){ if (cur==ans) cur=0; en[cur] = max(en[cur]+1,a[i].fi); res[en[cur]].pb(a[i].se); } for(int i=1; i<=n; i++){ for(int x : res[i]) cout << x << ' '; cout << "0\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...