알고리즘
[백준 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;
}