고통이다... 고통이야... 이 문제 이분탐색인 건 빨리 눈치챘는데 ㅋㅋ 이분탐색 구현을 못 해서 어려웠다.
난 이분탐색 싫어...
이분탐색의 싫은 점
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 |