Submission #1299467

#TimeUsernameProblemLanguageResultExecution timeMemory
1299467algorubikJob Scheduling (CEOI12_jobs)C++20
60 / 100
1098 ms44904 KiB
#include <bits/stdc++.h> using namespace std; #define fo(i, n) for (ll i = 0; i < n; i++) #define Fo(i, k, n) for (ll i = k; k < n ? i < n : i > n; k < n ? i += 1 : i -= 1) #define ll long long #define pb push_back #define F first #define S second #define yes cout<<'Y'<<'E'<<'S'<<endl; #define no cout<<'N'<<'O'<<endl; typedef vector<long long> vll; const ll MOD = 1e9 + 7; void solve(){ ll n,d,m;cin>>n>>d>>m; ll arr[m]; fo(i,m){ cin>>arr[i]; } ll r = 1; ll e = 1e8; ll ans = 0; map<ll,vll> mm; while(r<=e){ ll mid = (r+e)/2; vector<pair<ll,ll>> v; queue<pair<ll,ll>> q; fo(i,m){ v.push_back({arr[i],i}); } sort(v.begin(),v.end()); fo(i,m){ q.push(v[i]); } ll curday = 1; vll arr1(m,1e8); bool check = 1; ll current_work = mid; while(q.size()!=0 && curday<=n){ if(q.size()>0 && current_work>0 && q.front().F<=curday){ current_work--; arr1[q.front().S] = curday; q.pop(); } if(current_work==0){ curday++; current_work = mid; } if(q.front().F>curday){ current_work = mid; curday++; } } fo(i,m){ if(arr1[i]-arr[i]>d){ check = 0; break; } } if(check){ ans = mid; e = mid - 1; } else{ r = mid + 1; } } vector<pair<ll,ll>> v; queue<pair<ll,ll>> q; fo(i,m){ v.push_back({arr[i],i}); } sort(v.begin(),v.end()); fo(i,m){ q.push(v[i]); } ll curday = 1; vll arr1(m,1e8); bool check = 1; ll current_work = ans; while(q.size()!=0 && curday<=n){ if(q.size()>0 && current_work>0 && q.front().F<=curday){ current_work--; mm[curday].pb(q.front().S+1); q.pop(); } if(current_work==0){ curday++; current_work = ans; } if(q.front().F>curday){ current_work = ans; curday++; } } cout<<ans<<"\n"; fo(i,n){ for(auto x:mm[i+1]){ cout<<x<<" "; }cout<<0<<"\n"; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll test; test = 1; // cin >> test; while (test--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...