답안 #104824

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
104824 2019-04-09T10:14:45 Z daili Job Scheduling (CEOI12_jobs) C++14
0 / 100
283 ms 20052 KB
#include <bits/stdc++.h>

using namespace std;

bool check(vector<pair<int,int>> &allJobs, int currNr, int delay, int days)
{
    vector<int> busy(days+1);
    for (int i = 0; i < allJobs.size(); i++)
    {
        int day = allJobs[i].first;
        while(busy[day] >= currNr)
        {
            day++;
        }
        if (allJobs[i].second + delay <= day)
        {
          return false;
        }
        else
        {
            busy[day]++;
        }
    }
    return true;
}

void print(vector<pair<int,int>> &allJobs, int days, int nr)
{
  vector<vector<int>> busy(days+1);
  for (int i = 0; i < allJobs.size(); i++)
  {
      int day = allJobs[i].first;
      while(busy[day].size() >= nr)
      {
          day++;
      }
      busy[day].push_back(allJobs[i].second);
  }
  for (int i = 1; i <= days; i++)
  {
    for (auto j: busy[i])
    {
      cout << j << " ";
    }
    cout << 0 << "\n";
  }
}



int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n, d, m;
    cin >> n >> d >> m;

    vector<pair<int,int>> allJobs;
    for (int i = 0; i < m; i++)
    {
        int x;
        cin >> x;
        allJobs.push_back({x, i+1});
    }
    sort(allJobs.begin(), allJobs.end());

    int left = 1;
    int right = m;

    while(left <= right)
    {
        int mid = (left + right) >> 1;

        if (check(allJobs, mid, d, n))
        {
            right = mid - 1;
        }
        else
        {
            left = mid + 1;
        }
    }

    int mid = (left+right) >> 1;

    if (mid >= 2 && check(allJobs, mid-1, d, n))
    {
        cout << mid - 1 << "\n";
        print(allJobs, n, mid-1);
    }
    else if (check(allJobs, mid, d, n))
    {
        cout << mid << "\n";
        print(allJobs, n, mid);
    }
    else
    {
        cout << mid + 1 << "\n";
        print(allJobs, n, mid + 1);
    }
}

Compilation message

jobs.cpp: In function 'bool check(std::vector<std::pair<int, int> >&, int, int, int)':
jobs.cpp:8:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < allJobs.size(); i++)
                     ~~^~~~~~~~~~~~~~~~
jobs.cpp: In function 'void print(std::vector<std::pair<int, int> >&, int, int)':
jobs.cpp:30:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < allJobs.size(); i++)
                   ~~^~~~~~~~~~~~~~~~
jobs.cpp:33:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       while(busy[day].size() >= nr)
             ~~~~~~~~~~~~~~~~~^~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 21 ms 2936 KB Output isn't correct
2 Incorrect 27 ms 2936 KB Output isn't correct
3 Incorrect 31 ms 2928 KB Output isn't correct
4 Incorrect 32 ms 2936 KB Output isn't correct
5 Incorrect 23 ms 2928 KB Output isn't correct
6 Incorrect 25 ms 2928 KB Output isn't correct
7 Incorrect 25 ms 3056 KB Output isn't correct
8 Incorrect 25 ms 3064 KB Output isn't correct
9 Incorrect 61 ms 4848 KB Output isn't correct
10 Incorrect 51 ms 4844 KB Output isn't correct
11 Incorrect 29 ms 2424 KB Output isn't correct
12 Incorrect 60 ms 4176 KB Output isn't correct
13 Incorrect 103 ms 6624 KB Output isn't correct
14 Incorrect 117 ms 8676 KB Output isn't correct
15 Incorrect 162 ms 10184 KB Output isn't correct
16 Incorrect 181 ms 12760 KB Output isn't correct
17 Incorrect 213 ms 15448 KB Output isn't correct
18 Incorrect 224 ms 16340 KB Output isn't correct
19 Incorrect 254 ms 20052 KB Output isn't correct
20 Incorrect 283 ms 15364 KB Output isn't correct