본문 바로가기

백준

1072 게임

고통이다... 고통이야... 이 문제 이분탐색인 건 빨리 눈치챘는데 ㅋㅋ 이분탐색 구현을 못 해서 어려웠다.

난 이분탐색 싫어...

 

이분탐색의 싫은 점

1. 개구간 반개구간 등등 헷갈린다.

2. 최소 범위와 최대 범위를 생각해야 한다.

3. 구간을 만족하는 식 작성하는 것도 생각해야함

4. 이 범위가 어떤 건지 신경써서 구현해야 한다.

 

1-4를 제대로 고려하지 않으면? 아래처럼 된다. 

 

머리 탈모오는 줄 알았네

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <cstring>
#include <map>
#define xx first
#define yy second
#define MAX 1e11
 
using namespace std;
using i64 = long long;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;


int main()
{
    i64 x, y;
    scanf("%lld %lld", &x, &y);

    i64 lo = 1;
    i64 hi = MAX;
    i64 ans = y * 100 / x + 1;

    i64 c = ans;
    while (lo <= hi)
    {
        i64 mid = (lo + hi) / 2;
        
        if (((mid + y) * 100 / (mid + x)) >= ans)
        {
            hi = mid - 1;
            c = mid;
        }
        else
        {
            lo = mid + 1;
        }
    }
    
    i64 res2 = (y + c) * 100 / (x + c);
    i64 res3 = (y + c + 1) * 100 / (x + c + 1);
    
    if (ans <= res2 && res2 <= res3)
        cout << c;
    else
        cout << -1;

    return 0;
}

 

 

 

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

17363 우유가 넘어지면?  (0) 2020.07.24
15961 회전초밥  (0) 2020.07.21
1260 DFS와 BFS  (0) 2020.07.18
15809 전국시대  (0) 2020.03.15
1717 집합의 표현  (0) 2020.03.15