TakahiroNakamori

TakahiroNakamori

ナカモリタカヒロ

 
 

Two Arrays

問題

B – Two Arrays
プログラミング初級者から上級者まで楽しめる、競技プログラミングコンテストサイト「AtCoder」。オンラインで毎週開催プログラミングコンテストを開催しています。競技…

記録

ポイント

  1. \(a_i > b_i\) の場合について、 \(a_i = b_i\) になるまで \(b_i\) に \(1\) を加える作業を行う。
  2. \(a_i < b_i\) の場合について、 \(a_i = b_i\) または \(a_i + 1 = b_i\) になるまで \(a_i\) に \(2\) を加える作業を行う。
  3. 2. の作業で \(a_i + 1 = b_i\) になっているところは、 \(a_i\) に \(2\) 加え、 \(b_i\) に \(1\) 加えることで結果として、 \(a_i\) に \(1\) 加えたことになり、 \(a_i = b_i\) になる。
  4. したがって、 2. の回数が 1. の回数以上であれば、Yesとなる。
  5. 2. の回数と 1. の回数の差は 3. の作業で補えばいい。

コード例

#include <bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
using ll = long long;
using P = pair<int, int>;
#define rep(i, n) for(int i = 0; i < (n); ++i)
// using mint = modint998244353;
// using mint = modint1000000007;
// const int mod = 1000000007;
// const ll INF = 1LL << 60;
// const int INF = 1001001001;

// AtCoder Petrozavodsk Contest 001
// https://atcoder.jp/contests/apc001/tasks/apc001_b

int main() {
  int N;
  cin >> N;

  vector<ll> a(N);
  vector<ll> b(N);
  rep(i, N) { cin >> a[i]; }
  rep(i, N) { cin >> b[i]; }

  ll cnt1 = 0;
  rep(i, N) {
    if(a[i] > b[i]) {
      ll v = a[i] - b[i];
      cnt1 += v;
    }
  }

  ll cnt2 = 0;
  rep(i, N) {
    if(a[i] < b[i]) {
      ll v = (b[i] - a[i]) / 2;
      cnt2 += v;
    }
  }

  if(cnt1 <= cnt2) {
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }

  return 0;
}