2018년 2월 6일 화요일

Atcoder B - Two Arrays

Atcoder B - Two Arrays https://apc001.contest.atcoder.jp/tasks/apc001_b

N개의 숫자가 차있는 배열 A,B가 주어진다.
operation는 배열 A에 있는 원소 하나를 +2하고 배열 B에있는 원소 하나를 +1한다.
operation을 무한히 할 때 두 배열이 완전 일치하는지 판단하는 문제다.

배열A의 원소들의 합을 $q$, 배열 B의 원소들의 합을 $p$라 할 때 $q+2x=p+x$가 성립해야 한다.
즉, $q-p < 0$이면 모순이다.
또한 배열A의 원소 $a_{n}$은 결국 배열B의 원소 $b_{n}$과 동일해 져야 한다.
각각의 원소들을 가능한 동일하도록 맞춰주고 맞춰주는데 드는 횟수가 
배열B가 더 작거나 같으면 성립한다.
#include <cstdio>
typedef long long ll;
int N;
int a[10001];
int b[10001];
ll p, q;
int main(){
    scanf("%d"&N);
    for (int n = 0; n < N; n++scanf("%d"&a[n]), p += a[n];
    for (int n = 0; n < N; n++scanf("%d"&b[n]), q += b[n];
    if (q - p < 0return !printf("No\n");
    ll sa = 0, sb = 0;
    for (int n = 0; n < N; n++){
        if (a[n] > b[n]){
            sb += a[n] - b[n];
        }
        else if (a[n] < b[n]){
            int t = (b[n] - a[n] + 1>> 1;
            sa += t;
            sb += a[n] + 2 * t - b[n];
        }
    }
    if (sa >= sb) printf("Yes\n");
    else printf("No\n");
    return 0;
}
cs

댓글 없음:

댓글 쓰기