안녕하세요. 오늘은 최솟값을 만들 거예요.

문제

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

아이디어

A_i의 합, B_i의 합은 일정합니다.
그러므로 (a상수-b상수)의 절댓값이 최소이면 됩니다.
그런데 절댓값이므로 최솟값은 0이면 됩니다. 그래서 a=두번째 상수, b=첫번째 상수 이면 됩니다.
a,b가 범위를 넘지는 않냐고요? A랑 B 모두 값은 최대 100, 개수는 1000개이므로 많아봤자 10만입니다.

소스코드

#include <iostream>
#define ll long long
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll N, i, a, b, suma = 0, sumb = 0;

    cin >> N;
    for (i = 0; i < N; i++)
    {
        cin >> a;
        suma += a;
    }
    for (i = 0; i < N; i++)
    {
        cin >> b;
        sumb += b;
    }

    cout << sumb << ' ' << suma;
}


감사합니다.

0개의 댓글