본문 바로가기

백준

12915 대회 개최

가장 간단한 해결책을 생각해본다면 x와 y를 모두 다 구하는 건데 그럼 시간 복잡도가 초과된다. 

10^5 * 10^5 ...

이제 y의 시간복잡도를 줄이도록 노력해야 하는데... 

b와 c가 같아지고, 최대한 큰 값이 되게 하는 y를 구하면된다. 

 

 

 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>
#include <math.h>
#include <sstream>
#include<cassert>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#define MAXV 987654321

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;

int alphabet1[100];
int alphabet2[100];

void countAlphabet(char c, int *alphabet) {
    assert(c >= 65);
    assert(c <= 90);
    
    alphabet[c]++;
}

int main() {
    int e, em, m, mh, h;
    scanf("%d %d %d %d %d", &e, &em, &m, &mh, &h);
    
    int ans = 0;
    for (int x = 0; x <= em; x++) {
        int a = e + x;
        int b = m + (em - x);
        int c = h;
        
        // printf("a: %d, b: %d, c: %d\n", a, b, c);
        
        int big = max(b, c);
        int small = min(b, c);
        
        if (mh - (big - small) > 0) {
            b = big + (mh - (big - small)) / 2;
            c = big + (mh - (big - small)) / 2;
        } else {
            b = big;
            c = small + mh;
        }
        
        // printf("a: %d, b: %d, c: %d\n\n", a, b, c);
        
        ans = max(min({a, b, c}), ans);
    }
    
    printf("%d", ans);
    
    return 0;
}

 

'백준' 카테고리의 다른 글

1242 소풍  (0) 2023.01.14
13019 A를 B로  (0) 2022.12.17
6503번 망가진 키보드 푸는 중  (0) 2022.11.26
14217 그래프 탐색  (0) 2022.09.24
2992 크면서 작은 수  (0) 2022.08.27