제출 #448078

#제출 시각아이디문제언어결과실행 시간메모리
448078MohamedFaresNebiliJob Scheduling (CEOI12_jobs)C++14
0 / 100
59 ms8892 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using db = double; using ii = pair<int, int>; using iii = pair<ii, int>; using pl = pair<ll, ll>; using ti = tuple<int, int, int>; using tll = tuple<ll, ll, ll>; using tld = tuple<ld, ld, ld>; using vi = vector<int>; using vl = vector<ll>; using vii = vector<ii>; using vpl = vector<pl>; using vc = vector<char>; using vs = vector<string>; #define mp make_pair #define pb push_back #define pf push_front #define pp pop_back #define ppf pop_front #define ff first #define ss second #define lb lower_bound #define ub upper_bound #define sz(v) ((int)v.size()) #define all(x) (x).begin() , (x).end() #define mt make_tuple #define FAST ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define parse(A, n) for ( ll K = 0; K < n; K++) { cin >> A[K]; } #define process(A, n) for( ll K = 1; K <= n; K++) { cin >> A[K]; } #define out(A, n) { for ( ll K = 0; K < n; K++) { cout <<(K!=0?" ":"")<<A[K]; } cout<<'\n'; } #define show(x) { bool first=true; for(auto& a:x) { if(first) { first=false; } else { cout<<" "; } cout<<a; } cout<<'\n'; } #define mem1(memo) memset(memo, -1, sizeof memo); #define mem0(memo) memset(memo, 0, sizeof(memo); #define print(k) printf("%.2lf\n", k) ld dist(ld x, ld y, ld a, ld b) { return sqrt((x-a)*(x-a) + (y-b)*(y-b)); } ll gcd(ll a , ll b){ return b ? gcd(b , a % b) : a ;} ll lcm(ll a , ll b){ return (a * b) / gcd(a , b);} ll fact(ll n) { return n > 1?(n * fact(n-1)):1;} void setIn(string s) { freopen(s.c_str(),"r",stdin); } void setOut(string s) { freopen(s.c_str(),"w",stdout); } void IO(string s = "") { if (sz(s)) { setIn(s+".in"), setOut(s+".out"); } } const int N = 100024; const int M = 1e6+24; const int inf = 1e9; const int MOD = 1e9+7; const int nx[4] = {0, 0, 1, -1}, ny[4] = {1, -1, 0, 0}; //East, West, South, North const int dr[8] = {1,1,0,-1,-1,-1, 0, 1}, dc[8] = {0,1,1, 1, 0,-1,-1,-1}; // S,SE,E,NE,N,NW,W,SW const long long INF = 1e18; const double EPS = 1e-9; const double PI = 3.14159265358979323846; /** |||||||||||||||||||||||||||||||| SOLUTION |||||||||||||||||||||||||||||||| **/ ll n, d, m; bool can(ll val, vi a) { vl p(n+2, 0); for(ll l=1;l<=n;l++) p[l]=p[l-1]+a[l]; for(ll l=1;l<=n;l++) { ll diff=max(0LL, p[l]-val); p[l+1]+=diff; ll k=p[l]/val+(p[l]%val?1:0); if(k>d) return false; } return true; } void solve() { /// JUST KEEP GOING cin>>n>>d>>m; vii t(m); vi a(n+2, 0); for(ll l=0;l<n;l++) { cin>>t[l].ff; t[l].ss=l+1; ll k=t[l].ff; a[k]++; a[k+1]--; } sort(all(t)); ll lo=1, hi=m; ll ans; while(lo<=hi) { ll mid=(lo+hi)/2; if(can(mid, a)) { hi=mid-1; ans=mid; } else lo=mid+1; } cout<<ans<<'\n'; } int32_t main() { FAST; /// IO("outofplace"); int t; t=1; while(t--) { solve(); } return 0; } /*** Stuff you should look for : * int overflow, array bounds. * special cases (n=1?). * Observe The Constraints. * do smth instead of nothing and stay organized. * Reformulate The Problem Into Something More Theoretical. * Use flush operator when having TLE. * WRITE STUFF DOWN. * DON'T GET STUCK ON ONE APPROACH. Think of: * Brute force, Greedy(High->Low), Dynamic Programming, Divide and Conquer. * BFS, DFS, Flood Fill, Topological Sort, Bipartite Check, Articulation Points, SCC. * Minimum, Maximum Spanning Tree, SSSP, All-Pairs Shortest Paths, Network Flow. * Disjoint Set Union, Segment tree, Math, Two Pointers, Strings. Motivation : * Change Your Approach. * Don't Spend Too Much Time On The Problem: Move On! * If You Don't Fight You Cannot Win. ***/

컴파일 시 표준 에러 (stderr) 메시지

jobs.cpp: In function 'void setIn(std::string)':
jobs.cpp:48:31: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 | void setIn(string s) { freopen(s.c_str(),"r",stdin); }
      |                        ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
jobs.cpp: In function 'void setOut(std::string)':
jobs.cpp:49:32: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 | void setOut(string s) { freopen(s.c_str(),"w",stdout); }
      |                         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...