제출 #1308592

#제출 시각아이디문제언어결과실행 시간메모리
1308592joze_plocnikJob Scheduling (CEOI12_jobs)C++20
100 / 100
389 ms31104 KiB
#include <iostream> #include <string> #include <algorithm> #include <vector> #include <set> #include <sstream> #include <map> #include <cstdio> #include <queue> #include <cmath> #include <stack> #include <cctype> // doda isupper #define int long long // vse ti je long long #define vi vector<int> #define vpii vector<pair<int,int>> #define oopt cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(false); #define forn(i,n) for(int i = 0; i<n; i++) #define forn1(i,n) for(int i = 1; i<=n; i++) #define all(x) (x).begin(), (x).end() #define pi pair<int,int> #define vvi vector<vi> #define vvc vector<vector<char>> #define sz(x) (x).size() #define pb push_back #define str string using namespace std; int n,m,d; vpii stranke; vvi urnik(int meja){ vvi ans(n); int req_num = 0; for(int dan = 1; dan<=n; dan++){ forn(i,meja){ if(stranke[req_num].first > dan) break; // preveč naprej smo if(dan - stranke[req_num].first > d) return {}; //ne gre else{ ans[dan-1].push_back(stranke[req_num++].second+1); } if(req_num == m) return ans; } } return {}; } signed main() { cin >> n >> d>> m; stranke.resize(m); //kdaj + id forn(i,m){ cin >> stranke[i].first; //stranke[i].first; stranke[i].second = i; } sort(all(stranke)); int l = 1, r = m; while(l<r){ int rob = (l+r)/2; //cout << rob << "\n"; if(urnik(rob).empty()){ l = rob+1; } else { r = rob; } } cout << l << "\n"; vvi ans = urnik(l); forn(i,n){ for(int nekaj : ans[i]) cout << nekaj << " "; cout <<"0\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...