본문 바로가기
알고리즘 공부

백준 9998 블록쌓기[binary Search]

by kjwkjw 2020. 5. 21.

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

 

9998번: 블록 쌓기

문제 윤형이와 동혁이가 블록 쌓기 놀이를 한다. 두 명 모두 너비 N의 블록 건물을 쌓았는데, 윤형이는 k번째 열에 Yk개의 블록을 쌓았고 동혁이는 k번째 열에 Dk개의 블록을 쌓았다. 윤형이와 동��

www.acmicpc.net

#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;

vector<long long> v;
vector<long long> s;
long long low;
long long high;
long long cnt;
int n;
long long search1(long long mid)
{
    long long sum = 0;
    for (int i = 0; i <= n/2; ++i)
    {
        if(i==0)
        {
            sum = sum + abs(v[n/2]-mid);
        }
        else
        {
            sum = sum + abs(v[n/2-i]-(mid+i)) + abs(v[n/2+i]-(mid+i));
        }
    }
    for (int i = 0; i <= n/2; ++i)
    {
        if(i==0)
        {
            sum = sum + abs(s[n/2]-mid);
        }
        else
        {
            sum = sum + abs(s[n/2-i]-(mid+i)) + abs(s[n/2+i]-(mid+i));
        }
    }
    return sum;
}

int main(int argc, char** argv)
{
    ios::sync_with_stdio(false); 
    cin.tie(NULL); 
    cout.tie(NULL);
    long long num;
    long long mn = -1;
    cin>>n;
    for (int i = 0; i < n; ++i)
    {
        cin>>num;
        if(i==0)
        {
            low = num;
            high = num;
        }
        else
        {
            if(low>num) low = num;
            if(high<num) high = num;
        }
        v.push_back(num);
    }
    for (int i = 0; i < n; ++i)
    {
        cin>>num;
        if(low>num) low = num;
        if(high<num) high = num;
        s.push_back(num);
    }
    while(low<=high)
    {
        long long mid = (low+high)/2;
        long long mid2 = mid + 1;
        long long std = search1(mid);
        long long std2 = search1(mid2);
        if(std<std2)
        {
            if(mn==-1||mn>std) mn = std;
            high = mid - 1; 
        }
        else
        {
            if(mn==-1||mn>std2) mn = std2;
            low = mid2 + 1; 
        }

    }
    cnt = cnt + mn;
    cout<<cnt<<"\n";
}  

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

1963 소수 경로 [BFS,Brute Force]  (0) 2020.05.21
백준 2631 줄세우기 [LIS]  (0) 2020.05.21
백준 1049 기타줄  (0) 2020.05.21
백준 1037 약수  (0) 2020.05.21
백준 1026 보물[sort]  (0) 2020.05.21

댓글