제출 #1283111

#제출 시각아이디문제언어결과실행 시간메모리
1283111hoangnguyen0703Job Scheduling (CEOI12_jobs)C++20
100 / 100
83 ms13584 KiB
#include <bits/stdc++.h> using namespace std; vector<vector<int>> a; int m,n,d,res; bool check(int k) { if(k <= 0)return 0; int cnt = 0, finished = 0, dl = 0; for(int i = 1; i <= n; i++){ if(i <= n-d)cnt += (int)a[i].size(); //cnt = (cnt > k) ? cnt-k : 0; if(cnt > k){ cnt -= k; finished += k; } else{ finished += cnt; cnt = 0; } if(i > d){ dl += (int)a[i-d].size(); if(finished < dl)return false; } if(cnt == 0 && i > n-d)break; } return (cnt == 0); } int main() { ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin >> n >> d >> m; a = vector<vector<int>> (n-d+1); for(int i = 0; i < m; i++){ int tmp; cin >> tmp; a[tmp].push_back(i+1); } int l = 0, r = m; while(l < r){ int mid = (l+r) >> 1; if(check(mid))r = mid; else l = mid+1; } for(int i = l-1; i <= l+1; i++){ if(check(i)){ res = i; break; } } cout << res << '\n'; queue<int> q; for(int i = 1; i <= n; i++){ if(i <= n-d){ for(int j = 0; j < (int)a[i].size(); j++) q.push(a[i][j]); } if(!q.empty()) for(int j = 0; j < res; j++){ cout << q.front() << ' '; q.pop(); if(q.empty())break; } cout << 0 << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...