제출 #498113

#제출 시각아이디문제언어결과실행 시간메모리
498113MohamedAliSaidaneJob Scheduling (CEOI12_jobs)C++14
100 / 100
436 ms18352 KiB
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")


#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<ld,ld> pld;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<pii> vpi;
typedef vector<pll> vpl;
typedef vector<pld> vpd;

#define pb push_back
#define popb pop_back
#define all(v) (v).begin(),(v).end()
#define ff first
#define ss second

const ll MOD = 1e9 + 7;
const ll INF = 1e18;
int nx[4] = {1,-1,0,0}, ny[4] = {0,0,1,-1};
ll gcd(ll a , ll b) {return b ? gcd(b , a % b) : a ;}
ll lcm(ll a, ll b){return (a / gcd(a, b)) * b;}

const int MAX_M = 1e6 + 4;
int n, d, m;
pii req[MAX_M];
map<int,int> key;
map<int,vi> cor;
bool test(int x)
{
    int prec = 0;
    set<pii> rq;
    for(int i=  1; i <= n; i ++)
    {
        if(key.count(i) != 0)
        rq.insert({i,key[i]});
        int cur = x;
        while(cur > 0 && !rq.empty())
        {
            pii u = *(rq.begin());
            rq.erase(rq.begin());
            if(cur >= u.ss)
            {
                cur -= u.ss;
            }
            else
            {
                rq.insert({u.ff,u.ss-cur});
                break;
            }
        }
        if(rq.empty())
            continue;
        if(i+1 - ((*(rq.begin())).ff) > d)
            return false;
        if(i == n && !rq.empty())
            return false;
    }
    return true;
}
void solve()
{
    cin >> n>> d >> m;
    for(int i = 0; i < m; i ++)
    {
        int x; cin >> x;
        req[i] = {x,i+1};
        cor[x].pb(i+1);
        key[x] ++;
    }
    //for(auto e: req)
     //   cout << e.ff << ' ' << e.ss << '\n';
    int debut = 1;
    int fin = m;
    int ans = m;
    while(debut <= fin)
    {
        int mid = (debut+fin)/2;
        if(test(mid))
        {
            ans = mid;
            fin = mid -1;
        }
        else
            debut = mid + 1;
    }
    cout << ans << '\n';
    int cur = 0;
    set<pii> s;
    for(int i = 1; i <=n; i ++)
    {
        if(key.count(i) != 0)
        {
            for(auto e: cor[i])
                s.insert({i,e});
        }
        int cur = ans;
        while(cur != 0 && !s.empty())
        {
            cur --;
            pii u = *(s.begin());
            s.erase(s.begin());
            cout << u.ss << ' ';
        }
        cout << "0\n";
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int tt = 1;
    while(tt--)
        solve();
}

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

jobs.cpp:2: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    2 | #pragma GCC optimization ("O3")
      | 
jobs.cpp:3: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    3 | #pragma GCC optimization ("unroll-loops")
      | 
jobs.cpp: In function 'bool test(int)':
jobs.cpp:40:9: warning: unused variable 'prec' [-Wunused-variable]
   40 |     int prec = 0;
      |         ^~~~
jobs.cpp: In function 'void solve()':
jobs.cpp:97:9: warning: unused variable 'cur' [-Wunused-variable]
   97 |     int cur = 0;
      |         ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...