리셋 되지 말자

[백준 1654] 랜선 자르기 본문

알고리즘

[백준 1654] 랜선 자르기

kyeongjun-dev 2020. 6. 9. 15:52

전선의 길이가 2의 31승 까지 가는데, 자료형을 잘못 정해서 뻘짓을 많이 하였다

unsigned long long과 비트 연산을 이용해서 수를 만들어줌.
long long도 되는지 이상함.
분명 배열은 long long 인데 (실수임)
왜 되는거지>..?

#include<bits/stdc++.h>
using namespace std;

long long lan[100001];
int k, n;
int main(){
    cin>>k>>n;
    for(int i=0; i<k; i++){
        cin>>lan[i];
    }

    unsigned long long s=1, e;
    int a=31;
    e = ((unsigned long long)1<<31) -1 ;
    int sum=0;
    unsigned long long res=0;
    while(s<=e){
        sum=0;
        unsigned long long mid = (s+e)/2;
        for(int i=0; i<k; i++){
            sum+=(lan[i]/mid);
        }
        if(sum<n){
            e=mid-1;
        }
        else {
            res = max(res, mid);
            s=mid+1;
        }

    }
    cout<<res<<'\n';
    return 0;
}

'알고리즘' 카테고리의 다른 글

pair 구성요소를 같은 vector 정렬하기  (0) 2020.08.14
[우선순위 큐(Heap)] c++  (0) 2020.06.14
[c++] stoi  (0) 2020.05.21
[c++] to_string (int를 string으로 변경하는 함수)  (0) 2020.05.21
[C++] sort 내림차순  (0) 2020.05.21
Comments