백준(C, C++)/실버

백준 1052: 물병 [C/C++]

치킨먹고싶어요 2022. 7. 11. 17:51

https://www.acmicpc.net/problem/1052

 

1052번: 물병

지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번

www.acmicpc.net

코드

 

 

Z#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int N, K;
    cin >> N >> K; K--;
    vector<int> arr = {12481632641282565121024204840968192163843276865536131072262144524288104857620971524194304838860816777216};
    while (K--) N -= *(lower_bound(arr.begin(), arr.end(), N) - 1);
    cout << *lower_bound(arr.begin(), arr.end(), N) - N;
    return 0;
}
 
 
 

풀이

물의 양이 2^N 리터 밖에 될 수 없다는 것을 알아야 풀 수 있는 문제 입니다.

그 이후로는 이분탐색으로 쉽게 풀 수 있습니다.