제출 #566601

#제출 시각아이디문제언어결과실행 시간메모리
566601zuhaib786Job Scheduling (CEOI12_jobs)C++14
0 / 100
456 ms9944 KiB
#include<bits/stdc++.h>
using namespace std;
using lli = long long int;
using pii = pair<lli, lli>;
using vc = vector<lli>;

#define FOR(i, n) for(int i= 0; i< n; i++)
#define ROF(i, n) for(int i = n - 1; i>= 0; i--)
#define ff first
#define ss second
const int maxN  = 1e5 + 5;
pii arr[maxN];
map<lli, vector<int>>mp;
vector<vector<int>>simulate(lli mid, lli n, lli m, lli d)
{
    multiset<pii>s;
    vector<vector<int>>v;
    FOR(i, n)
    {
        if(mp.count(i + 1))
        {
            for(auto x : mp[i + 1])
            {
                s.insert({i + 1, x});
            }
        }
        if(s.size() <= mid)
        {
            vector<int>temp;
            for(auto x: s)
            {
                temp.push_back(x .second + 1);
            }   
            temp.push_back(0);
            v.push_back(temp);
            s = multiset<pii>();
        }
        else
        {
            int k = mid;
            vector<int>temp;
            while(k-- )
            {
                temp.push_back((*s.begin()).ss + 1);
                s.erase(s.find(*s.begin()));
            }
            temp.push_back(0);
            v.push_back(temp);
        }
    }
    return v;
}
bool Poss(lli mid, lli n, lli m, lli d)
{
    multiset<lli>s;
    FOR(i, n)
    {
        if(mp.count(i + 1))
        {
            for(auto x : mp[i + 1])
            {
                s.insert(i + 1);
            }
        }
        
        if(s.size()!= 0 &&*s.begin() + d <= i + 1)
        {
            return false;
        }
        if(s.size() <= mid)
        {
            s = multiset<lli>();
        }
        else
        {
            int k = mid;
            while(k-- )
            {
                s.erase(s.find(*s.begin()));
            }
        }
    }
    return s.size() == 0;
}
int main()
{
    int n, m, d;
    cin>>n>>d>>m;
    FOR(i, m)
    {
        cin>>arr[i].ff;
        arr[i].ss = i;
        mp[arr[i].ff].push_back(i);
    }
    sort(arr, arr + n);
    lli left = 1;
    lli right = m;
    lli ans = m;
    while(left <= right)
    {
        lli mid = left + (right - left )/2;
        if(Poss(mid, n, m, d))
        {
            ans = mid;
            right = mid - 1;   
        }
        else
        {
            left = mid + 1;
        }
    }
    cout<<ans<<'\n';
    vector<vector<int>>v = simulate(ans, n, m, d);
    for(auto x : v)
    {
        for(auto w: x)
        {
            cout<<w<<" ";
        }
        cout<<'\n';
    }
}

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

jobs.cpp: In function 'std::vector<std::vector<int> > simulate(lli, lli, lli, lli)':
jobs.cpp:27:21: warning: comparison of integer expressions of different signedness: 'std::multiset<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} and 'lli' {aka 'long long int'} [-Wsign-compare]
   27 |         if(s.size() <= mid)
      |            ~~~~~~~~~^~~~~~
jobs.cpp: In function 'bool Poss(lli, lli, lli, lli)':
jobs.cpp:60:22: warning: unused variable 'x' [-Wunused-variable]
   60 |             for(auto x : mp[i + 1])
      |                      ^
jobs.cpp:70:21: warning: comparison of integer expressions of different signedness: 'std::multiset<long long int>::size_type' {aka 'long unsigned int'} and 'lli' {aka 'long long int'} [-Wsign-compare]
   70 |         if(s.size() <= mid)
      |            ~~~~~~~~~^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...