제출 #575373

#제출 시각아이디문제언어결과실행 시간메모리
575373ddy888Job Scheduling (CEOI12_jobs)C++17
100 / 100
245 ms20136 KiB
#undef _GLIBCXX_DEBUG #include <bits/stdc++.h> using namespace std; using ll = long long; #define pb push_back #define fi first #define si second typedef pair<int,int> pi; typedef tuple<int,int,int> ti; void debug_out() {cerr<<endl;} template <typename Head, typename... Tail> void debug_out(Head _H, Tail... _T) {cerr<<" "<<to_string(_H);debug_out(_T...);} #define debug(...) cerr<<"["<<#__VA_ARGS__<<"]:",debug_out(__VA_ARGS__) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int MAXN = 100010; int n, d, m; pi arr[MAXN * 10]; vector<int> ans[MAXN]; bool good(int num, int flag) { int j = 1; for (int i = 1; i <= n; ++i) { int cnt = num; while (j <= m && cnt && arr[j].fi <= i) { if (i - arr[j].fi > d) return false; if (flag) ans[i].pb(arr[j].si); ++j; --cnt; } } return j >= m; } int main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin >> n >> d >> m; for (int i = 1; i <= m; ++i) cin >> arr[i].fi, arr[i].si = i; sort(arr + 1, arr + 1 + m); int lo = 0, hi = m + 1; while (lo + 1 < hi) { int mid = (lo + hi) >> 1; if (good(mid, 0)) hi = mid; else lo = mid; } cout << hi << '\n'; good(hi, 1); for (int i = 1; i <= n; ++i) { for (auto j: ans[i]) cout << j << ' '; cout << 0 << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...