[HSAT 4회 정기 코딩 인증평가 기출] 슈퍼컴퓨터 클러스터 (C++)
2024. 3. 20. 21:03ㆍAlgorithm/Softeer
풀이
매개변수를 이용한 이분탐색 알고리즘 문제였다. 처음에 문제의 조건에서 B의 크기에 간과하여 시간이 꽤 소요되었는데, cost를 계산 후 매개변수의 차이의 합을 저장하던 중 자료형의 크기를 훨씬 넘어버리는 케이스를 생각하지 못하였다. overflow가 발생하면 더이상 차이의 합을 저장하지 않고 bool 타입 변수를 true로 조정 후 break문을 사용하여 넘어가는게 핵심이었던 문제이다.
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
long long N,B,ans;
vector<long long> vec;
int main(int argc, char** argv)
{
cin>>N>>B;
vector<long long> vec(N);
for(int i=0;i<N;i++){
cin>>vec[i];
}
sort(vec.begin(),vec.end());
long long l=1,r=2000000000;
while(l <= r){
long long mid = (l + r) / 2;
unsigned long long sum = 0;
bool overflow = false;
for(int i=0;i<N;i++){
if(mid-vec[i]>0){
unsigned long long cost = pow(mid-vec[i],2);
if(cost>B || sum>B-cost){
overflow = true;
break;
}
sum += cost;
}
else break;
}
if(overflow || sum > B){
r = mid - 1;
}
else{
ans = mid;
l = mid + 1;
}
}
cout<< ans;
return 0;
}
'Algorithm > Softeer' 카테고리의 다른 글
수퍼바이러스 (1) | 2024.03.26 |
---|---|
징검다리 (0) | 2024.03.26 |
[HSAT 5회 정기 코딩 인증평가 기출] 성적 평가 (0) | 2024.03.20 |
[HSAT 7회 정기 코딩 인증평가 기출] 자동차 테스트 (0) | 2024.03.20 |
[HSAT 7회 정기 코딩 인증평가 기출] 순서대로 방문하기 (0) | 2024.03.20 |