본문 바로가기

PS/boj

백준 18234 당근 훔쳐 먹기

http://www.acmicpc.net/problem/18234 

 

18234번: 당근 훔쳐 먹기

첫 번째 줄에 N(1 ≤ N ≤ 200,000)과 T(N ≤ T ≤ 100,000,000)가 공백으로 구분되어 주어진다. 오리는 당근의 맛을 충분히 높이기 위해 항상 N이상인 T일 동안 재배한다. 다음 N개의 줄에 걸쳐서 i+1번째

www.acmicpc.net

정렬을 사용하는 그리디 문제였습니다.

초기값 Wi가 주어지고 시간이 1씩 지날수록 Pi만큼 맛이 커지는데 Pi는 Wi보다 크다는 조건이 있습니다.

따라서 Wi를 바로 먹기보다 시간이 지나고 먹는게 무조건 크다는걸 알 수 있습니다.

이를 적용하면 Pi가 클수록 가능한 늦게먹으면 됩니다. T가 N보다 크므로 T-N부터 Pi가 작은거부터 먹기 시작하면 됩니다.

#include<stdio.h>
#include<queue>
#include<vector>
#include<iostream>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
void fast_io() {
  cin.tie(0)->sync_with_stdio(0);
}
int main(){
    fast_io();
    int N,T;
    cin>>N>>T;
    vector<pair<int,int>> vec;
    for(int x=0;x<N;x++){
        int a,b;
        cin>>a>>b;
        vec.push_back({b,a});
    }
    sort(vec.begin(),vec.end());
    long long ans=0;
    for(int x=T-N;x<=T;x++){
        ans+=(long long)x*(long long)vec[x-T+N].first+(long long)vec[x-T+N].second;
    }
    cout<<ans;
}

 

'PS > boj' 카테고리의 다른 글

백준 11689 GCD(n, k) = 1  (0) 2022.07.21
백준 15659 연산자 끼워놓기 (3)  (0) 2022.07.20
백준 22985 문자열 조작의 달인  (0) 2022.07.18
백준 15559 내 선물을 받아줘  (0) 2022.07.17
백준 2069 보이는 산맥 (C++)  (0) 2022.07.15