문제 링크
1072번 게임 : https://www.acmicpc.net/problem/1072
문제 설명 및 해결 아이디어
주어진 게임횟수는 최대 1,000,000,000이다. 시간초과가 날 수 있기 때문에 Parametric Search로 접근해야 한다.
mid를 게임횟수로 설정하여, 승률(Z)이 변할 때의 mid의 최소값이 문제의 출력이된다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <iostream> #include <cstdio> #include <algorithm> using namespace std; #define ll long long int #define INF 9999999999999999 ll total, win; ll originRatio, newRatio; ll func() { ll left = 1, right = 1000000000; ll ret = INF; originRatio = win * 100 / total; while (left <= right) { ll mid = (left + right) / 2; newRatio = (win + mid) * 100 / (total + mid); if (originRatio < newRatio) { right = mid - 1; ret = min(ret, mid); } else left = mid + 1; } return ret; } int main() { while (scanf("%lld %lld", &total, &win) != EOF) { ll res = func(); printf("%lld\n", res == INF ? -1 : res); } return 0; } | cs |
'문제풀기이야기' 카테고리의 다른 글
2343번_기타 레슨_BOJ (0) | 2018.07.16 |
---|---|
2805번_나무 자르기_BOJ (0) | 2018.07.15 |
14502번_연구소_BOJ (0) | 2018.06.25 |
14503번_로봇 청소기_BOJ (0) | 2018.06.25 |
14499번_주사위굴리기_BOJ (0) | 2018.06.25 |