๐Ÿ•๏ธ ICPC Sinchon/Greedy

[BOJ][C++] ๋ฐฑ์ค€ 27112๋ฒˆ: ์‹œ๊ฐ„ ์™ธ ๊ทผ๋ฌด ๋ฉˆ์ถฐ!

์„ ๋‹ฌ 2023. 2. 1. 00:15
๋ฐ˜์‘ํ˜•

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

 

27112๋ฒˆ: ์‹œ๊ฐ„ ์™ธ ๊ทผ๋ฌด ๋ฉˆ์ถฐ!

์˜ค๋Š˜๋„ ์—ฌ๋Ÿฌ ์ฒด๊ณ„์˜ ๊ฐœ๋ฐœ ์ž„๋ฌด๋ฅผ ์—ด์‹ฌํžˆ ์ˆ˜ํ–‰ ์ค‘์ธ ์ค€๋ฏผ์ด์—๊ฒŒ ๊ฐ‘์ž๊ธฐ ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋“ค์–ด์™”๋‹ค. ํ•ด๋‹น ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ๋Š” ์ด $N$๊ฐœ์˜ ์ž‘์—…์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ์ž‘์—…์€ $t_i$์˜ ๊ทผ๋ฌด์ผ

www.acmicpc.net

 

๋ฌธ์ œ

์˜ค๋Š˜๋„ ์—ฌ๋Ÿฌ ์ฒด๊ณ„์˜ ๊ฐœ๋ฐœ ์ž„๋ฌด๋ฅผ ์—ด์‹ฌํžˆ ์ˆ˜ํ–‰ ์ค‘์ธ ์ค€๋ฏผ์ด์—๊ฒŒ ๊ฐ‘์ž๊ธฐ ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋“ค์–ด์™”๋‹ค. ํ•ด๋‹น ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ๋Š” ์ด N๊ฐœ์˜ ์ž‘์—…์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ์ž‘์—…์€ ti์˜ ๊ทผ๋ฌด์ผ์ด ํ•„์š”ํ•˜๋ฉฐ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘ํ•œ ์ดํ›„ di์ผ์ด ์ง€๋‚˜๊ธฐ ์ „์— ๋๋‚ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ‰์‹œ ๊ทผ๋ฌด๋งŒ์œผ๋กœ๋Š” ๋ชจ๋“  N๊ฐœ์˜ ์ž‘์—…์„ ์‹œ๊ฐ„ ๋‚ด์— ๋๋‚ด๊ธฐ ํž˜๋“ค์–ด ๋ณด์˜€๋˜ ์ค€๋ฏผ์ด๋Š” ๊ฐœ์ธ ์ •๋น„์‹œ๊ฐ„์„ ํฌ๊ธฐํ•˜๋ฉฐ ์‹œ๊ฐ„ ์™ธ ๊ทผ๋ฌด๋ฅผ ํ•˜๊ณ ์ž ํ•œ๋‹ค.

๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ๋Š” ์›”์š”์ผ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉฐ, ํ‰์‹œ ๊ทผ๋ฌด๋Š” ์›”์š”์ผ๋ถ€ํ„ฐ ๊ธˆ์š”์ผ๊นŒ์ง€๋งŒ ์ง„ํ–‰ํ•œ๋‹ค. ์‹œ๊ฐ„ ์™ธ ๊ทผ๋ฌด๋Š” ์š”์ผ๊ณผ ๊ด€๊ณ„์—†์ด ๋งค์ผ ์ตœ๋Œ€ ํ•œ ๋ฒˆ์”ฉ๋งŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹œ๊ฐ„ ์™ธ ๊ทผ๋ฌด๋ฅผ 1ํšŒ ์ง„ํ–‰ํ•˜๋ฉด 1์ผ์น˜ ์—…๋ฌด๋ฅผ ๋๋งˆ์น  ์ˆ˜ ์žˆ๋‹ค.

์ค€๋ฏผ์ด๋Š” ์ด๋ฅผ ํ† ๋Œ€๋กœ ํšจ๊ณผ์ ์ธ ์ผ์ •์„ ์งœ๊ณ  ์‹ถ์—ˆ์ง€๋งŒ, ์ด๋ฏธ ํ”„๋กœ์ ํŠธ๋กœ ๋„ˆ๋ฌด ๋ฐ”๋น ์ง„ ์ค€๋ฏผ์ด๋Š” ์ผ์ •์„ ์งค ์‹œ๊ฐ„์กฐ์ฐจ ์—†๋Š” ์ƒํƒœ์ด๋‹ค. ๋ฐ”์œ ์ค€๋ฏผ์ด๋ฅผ ์œ„ํ•ด, ๋ชจ๋“  ์ž‘์—…์„ ๋งˆ๊ฐ ๊ธฐํ•œ ์ „๊นŒ์ง€ ๋๋‚ด๊ณ ์ž ํ•  ๋•Œ ํ•ด์•ผ ํ•˜๋Š” ์ตœ์†Œ ์‹œ๊ฐ„ ์™ธ ๊ทผ๋ฌด ์ผ์ˆ˜๋ฅผ ์•Œ๋ ค์ฃผ์ž.

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ์ž‘์—…์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1≤N≤100000)โ€Š

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N+1๋ฒˆ์งธ ์ค„๊นŒ์ง€, ๊ฐ ์ž‘์—…์˜ ๋งˆ๊ฐ ๊ธฐํ•œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ di์™€ ์ž‘์—…์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ti๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. (1≤di,ti≤100000)โ€Š

์ถœ๋ ฅ

๋ชจ๋“  ์ž‘์—…์„ ๋งˆ๊ฐ ๊ธฐํ•œ ์ „๊นŒ์ง€ ๋๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ตœ์†Œ ์‹œ๊ฐ„ ์™ธ ๊ทผ๋ฌด ์ผ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋งŒ์•ฝ ์–ด๋–ป๊ฒŒ ํ•ด๋„ ๋งˆ๊ฐ ๊ธฐํ•œ ์ „๊นŒ์ง€ ๋ชจ๋“  ์ž‘์—…์„ ๋๋‚ผ ์ˆ˜ ์—†๋‹ค๋ฉด, −1์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

์šฐ์„ , ๋งˆ๊ฐ์ผ์ด ๋น ๋ฅด๋ฉด์„œ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ ์€ ์ˆœ์„œ๋กœ ์—…๋ฌด๋“ค์„ ์ •๋ ฌํ•œ๋‹ค.

๋‚ ์งœ๋ฅผ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ๋งค์ผ ์ฃผ์–ด์ง„ ์—…๋ฌด๋ฅผ ํ•˜๋ฃจ์น˜์”ฉ ํ•  ๊ฒƒ์ด๋‹ค.

๋‹จ, ํ˜„์žฌ ์—…๋ฌด์˜ ๋งˆ๊ฐ์ผ์ด ์ง€๋‚ฌ๋‹ค๋ฉด ํ•ด๋‹น ์—…๋ฌด์˜ ๋‚จ์€ ์ผ์„ ์ถ”๊ฐ€์—…๋ฌด ์‹œ๊ฐ„์— ๋ฐฐ์ •ํ•œ๋‹ค.

์ด๋•Œ, ์ถ”๊ฐ€์—…๋ฌด์‹œ๊ฐ„์ด ํ˜„์žฌ ๋‚ ์งœ๋ฅผ ๋„˜์–ด์„ ๋‹ค๋ฉด ์ด ๊ฒฝ์šฐ ํ•˜๋ฃจ์— ํ•œ๋ฒˆ์”ฉ๋งŒ ์ถ”๊ฐ€์—…๋ฌด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์กฐ๊ฑด์ด ์œ„๋ฐฐ๋˜๋ฏ€๋กœ -1 ์ถœ๋ ฅ

 

๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์†์œผ๋กœ ์ง์ ‘ ๋ฐฐ์ •ํ•ด๋ณด๊ณ  ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•ด๋ณธ ๋’ค ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์‰ฌ์šธ ๊ฒƒ์ด๋‹ค.

 

๋งŒ์•ฝ 11%์—์„œ ๋ง‰ํžŒ๋‹ค๋ฉด ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•˜์ž (100,000 * 100,000 > int๋ฒ”์œ„)

๋งŒ์•ฝ 24%์—์„œ ๋ง‰ํžŒ๋‹ค๋ฉด ๋งˆ๊ฐ์‹œ๊ฐ„์ด ๊ฐ™์€ ์ž‘์—…์ด ๋‘๊ฐœ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜์ž.

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

typedef pair<int,int> ci;

bool cmp(ci a, ci b) {
    if(a.first == b.first)
        return a.second < b.second;
    return a.first < b.first;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    
    int n, a, b;
    cin >> n;
    vector<ci> v;
    for(int i=0; i<n; i++) {
        cin >> a >> b;
        v.push_back({a, b});
    }
    
    // ๋งˆ๊ฐ์ผ์ด ์•ž์„  ์ˆœ -> ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ ์€ ์ˆœ ์œผ๋กœ ์ •๋ ฌ
    sort(v.begin(), v.end(), cmp);
    
    int idx=0; // idx : ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ์ž‘์—… ๋ฒˆํ˜ธ, v[idx]={๋งˆ๊ฐ ๋‚ , ํ•„์š”ํ•œ ์‹œ๊ฐ„}
    long long ans=0; // ans : ์ดˆ๊ณผ ๊ทผ๋ฌด ์ผ ์ˆ˜
    for(long long day=0; idx<n; day++) {  // ๋งค์ผ ์ž‘์—… ํ•˜๊ธฐ
        
        // ํ˜„์žฌ ์ž‘์—…์˜ ๋งˆ๊ฐ ๊ธฐํ•œ์ด ๋„˜์–ด๊ฐ”๋‹ค๋ฉด
        while(v[idx].first < day) {
            // ๋‚จ์€ ์ž‘์—… ์ดˆ๊ณผ๊ทผ๋ฌด
            ans += v[idx].second;
            if(ans >= day) {  // ์ดˆ๊ณผ๊ทผ๋ฌด๋‚ ์ด ์˜ค๋Š˜๋‚ ์งœ๋ณด๋‹ค ํฌ๋‹ค๋ฉด -1 ์ถœ๋ ฅ ํ›„ ์ข…๋ฃŒ
                ans = -1;
                break;
            }
            // ๋‹ค์Œ ์—…๋ฌด
            idx++;
            if(idx >= n)  // ์—…๋ฌด ๋๋‚˜๋ฉด ์ข…๋ฃŒ
                break;
        }
        if(ans == -1)
            break;
        
        // ํ† ์š”์ผ, ์ผ์š”์ผ ํœด์‹
        if(day%7==6 || day%7==0)
            continue;
        
        // ์˜ค๋Š˜์˜ ์ž‘์—…
        v[idx].second--;  // ํ˜„์žฌ ์ž‘์—…์˜ ๋‚จ์€ ์‹œ๊ฐ„ - 1
        if(v[idx].second == 0)
            idx++;  // ์ž‘์—… ํ•˜๋‚˜ ๋๋ƒˆ์œผ๋ฉด ๋‹ค์Œ ์ž‘์—… ๋„˜์–ด๊ฐ€๊ธฐ
    }
    
    cout << ans;
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•