제출 #1171746

#제출 시각아이디문제언어결과실행 시간메모리
1171746abdulaziz707Job Scheduling (CEOI12_jobs)C++20
100 / 100
217 ms31120 KiB
#include <bits/stdc++.h> #define endl '\n' #define int long long #define all(x) x.begin(), x.end() #define allr(x) x.rbegin(), x.rend() using namespace std; using ll = long long; const int inf = 2e18 + 31, mod = 1e9 + 7, MX = 1e5 + 1; const double eps = 1e-8; int gcd(int a, int b){ return b ? gcd(b, a%b) : a; } int lcm(int a, int b){ return a/gcd(a, b)*b; } void solve(){ /* 8 2 12 1 2 4 2 1 3 5 6 2 3 6 4 */ int n, d, m; cin >> n >> d >> m; vector<pair<int,int>> job(m); for(int day, i = 0; i < m; i++){ cin >> day; job[i].first = day; job[i].second = i + 1; } sort(all(job)); vector<vector<int>> schedule; int l = 1, r = m, mid; function<bool(int)> check = [&](int num){ int pos = 0; for(int day = 1; day <= n; day++){ for(int j = 0; j < num && pos < m && job[pos].first <= day; j++){ if(day - job[pos].first > d) return false; pos++; } } if(pos == m) { pos = 0; schedule.assign(n + 1, vector<int>(0)); for(int day = 1; day <= n; day++){ for(int j = 0; j < num && pos < m && job[pos].first <= day; j++){ schedule[day].push_back(job[pos++].second); } } return true; } return false; }; while(l < r){ mid = l + (r - l)/2; if(check(mid)) r = mid; else l = mid + 1; } cout << l << endl; for(int day = 1; day <= n; day++){ for(auto job_id : schedule[day]) cout << job_id << ' '; cout << "0\n"; } } signed main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int tt = 1; //cin >> tt; while(tt --){ solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...