답안 #448084

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
448084 2021-07-28T18:40:49 Z MohamedFaresNebili Job Scheduling (CEOI12_jobs) C++14
0 / 100
251 ms 38272 KB
#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 = 124;
const int M = 1e5+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, vpl& t)
{
    ll maxd=0, endT[val]={0};
    for(ll l=0, curr=0;l<m;l++, curr++) {
        if(curr==val) curr=0;
        if(endT[curr]+1>t[l].ff) {
            endT[curr]++;
            maxd=max(maxd, endT[curr]-t[l].ff);
        }
        else endT[curr]=t[l].ff;
    }
    return maxd<=d;
}

void solve()
{
    /// JUST KEEP GOING
    cin>>n>>d>>m; vpl t(m);
    for(ll l=0;l<m;l++) {
        cin>>t[l].ff; t[l].ss=l+1;
    }
    sort(all(t)); ll lo=0, hi=m; ll ans=LONG_LONG_MAX;
    while(lo<hi) {
        ll mid=(lo+hi)/2;
        if(can(mid, t)) { hi=mid; ans=mid; }
        else lo=mid+1;
    }
    cout<<ans<<'\n';

    vl sol[124]; ll endT[ans]{0};
    for(ll l=0, curr=0;l<m;l++, curr++) {
        if(curr==ans) curr=0;
        endT[curr]=max(t[l].ff, endT[curr]+1);
        sol[endT[curr]].pb(t[l].ss);
    }
    for(ll l=1;l<=n;l++) {
        for(auto u:sol[l]) cout<<u<<" ";
        cout<<"0\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.
***/

Compilation message

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); }
      |                         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 29 ms 6984 KB Execution killed with signal 11
2 Runtime error 29 ms 6948 KB Execution killed with signal 11
3 Runtime error 29 ms 6980 KB Execution killed with signal 11
4 Runtime error 29 ms 7052 KB Execution killed with signal 11
5 Runtime error 29 ms 7100 KB Execution killed with signal 11
6 Runtime error 30 ms 6984 KB Execution killed with signal 11
7 Runtime error 29 ms 7080 KB Execution killed with signal 11
8 Runtime error 29 ms 7068 KB Execution killed with signal 11
9 Runtime error 36 ms 6948 KB Execution killed with signal 11
10 Runtime error 38 ms 7024 KB Execution killed with signal 11
11 Runtime error 25 ms 4812 KB Execution killed with signal 11
12 Runtime error 60 ms 8956 KB Execution killed with signal 11
13 Runtime error 81 ms 13532 KB Execution killed with signal 11
14 Runtime error 124 ms 16564 KB Execution killed with signal 11
15 Runtime error 132 ms 21388 KB Execution killed with signal 11
16 Runtime error 161 ms 24488 KB Execution killed with signal 11
17 Runtime error 214 ms 28620 KB Execution killed with signal 11
18 Runtime error 217 ms 34336 KB Execution killed with signal 11
19 Runtime error 251 ms 38272 KB Execution killed with signal 11
20 Runtime error 193 ms 28752 KB Execution killed with signal 11