안녕하세요. 오늘은 책을 나눠줄 거예요.

문제

https://www.acmicpc.net/problem/9576

아이디어

일단 b를 기준으로 오름차순 정렬을 합니다.
그리고 범위를 순서대로 보면서 가능한 최솟값에 배정을 해주면 됩니다.

소스코드

#include <iostream>
#include <vector>
#include <algorithm>
#define ll long long
using namespace std;

bool cmp(pair <ll, ll> A, pair <ll, ll> B)
{
    if (A.second != B.second) return A.second < B.second;
    return A.first < B.first;
}

int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll T, N, M, i, a, b;
    cin >> T;
    while (T--)
    {
        vector <pair <ll, ll> > v;
        cin >> N >> M;
        for (i = 0; i < M; i++)
        {
            cin >> a >> b;
            v.push_back({ a,b });
        }
        sort(v.begin(), v.end(), cmp);

        bool ck[1010] = { 0 };
        ll cnt = 0;
        for (i = 0; i < M; i++)
        {
            for (ll j = v[i].first; j <= v[i].second; j++)
            {
                if (ck[j] == false)
                {
                    ck[j] = true;
                    cnt++;
                    break;
                }
            }
        }
        cout << cnt << "\n";
    }
}


감사합니다.

0개의 댓글