https://www.acmicpc.net/problem/27112
๋ฌธ์
์ค๋๋ ์ฌ๋ฌ ์ฒด๊ณ์ ๊ฐ๋ฐ ์๋ฌด๋ฅผ ์ด์ฌํ ์ํ ์ค์ธ ์ค๋ฏผ์ด์๊ฒ ๊ฐ์๊ธฐ ์๋ก์ด ๊ฐ๋ฐ ํ๋ก์ ํธ๊ฐ ๋ค์ด์๋ค. ํด๋น ๊ฐ๋ฐ ํ๋ก์ ํธ๋ ์ด 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;
}
/*
*/
'๐๏ธ ICPC Sinchon > Greedy' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 16206๋ฒ: ๋กค์ผ์ดํฌ (0) | 2023.04.12 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 11501๋ฒ: ์ฃผ์ (0) | 2023.01.31 |
[BOJ][C++] 20921๋ฒ: ๊ทธ๋ ๊ณ ๊ทธ๋ฐ ์ฌ์ด (0) | 2023.01.31 |
[BOJ][C++] ๋ฐฑ์ค 14659๋ฒ: ํ์กฐ์์ด์ ๋ฆฌํ๊ณ ์ดใ ใ (0) | 2023.01.31 |
[BOJ G4][C++] ๋ฐฑ์ค 1339๋ฒ: ๋จ์ด ์ํ (0) | 2022.10.11 |