Problem:
Score : 300 points

Problem Statement

You are given two integer sequences of length N: a_1,a_2,..,a_N and b_1,b_2,..,b_N.
Determine if we can repeat the following operation zero or more times so that the sequences a and b become equal.

Operation: Choose two integers i and j (possibly the same) between 1 and N (inclusive), then perform the following two actions simultaneously:

Add 2 to a_i.

Add 1 to b_j.

Constraints

1 ≤ N ≤ 10 000

0 ≤ a_i,b_i ≤ 10^9 (1 ≤ i ≤ N)

All input values are integers.

Input

Input is given from Standard Input in the following format:

N
a_1 a_2 .. a_N
b_1 b_2 .. b_N

Output

If we can repeat the operation zero or more times so that the sequences a and b become equal, print Yes; otherwise, print No.

Sample Input 1

3
1 2 3
5 2 2

Sample Output 1

Yes

For example, we can perform three operations as follows to do our job:

First operation: i=1 and j=2. Now we have a = \{3,2,3\}, b = \{5,3,2\}.

Second operation: i=1 and j=2. Now we have a = \{5,2,3\}, b = \{5,4,2\}.

Third operation: i=2 and j=3. Now we have a = \{5,4,3\}, b = \{5,4,3\}.

Sample Input 2

5
3 1 4 1 5
2 7 1 8 2

Sample Output 2

No

Sample Input 3

5
2 7 1 8 2
3 1 4 1 5

Sample Output 3

No

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
using namespace std;
#define IN freopen("input.txt","r",stdin)
#define OUT freopen("output.txt","w",stdout)
#define pf printf
#define sf scanf
#define pb push_back
#define MAX5 100005
#define MAX6 1000005
#define MAX7 10000005
#define FOR(a,n) for(int i=a;i<n;i++)
#define all(x) x.begin(),x.end()
#define mod7 1000000007
typedef long long int ll;
typedef long double lld;
const double PI=2*acos(0.0);
int CASE=1,TEST=0;
template<typename T>T ceilling(T a){return ((double)((ll)a))==a?  (T)a :  (T)((ll)(a+1.0));}
template<typename T>T flooring(T a){return (T)((ll)a);}
template<typename T>T pairmin(T a,T b){return (a>b) ? b : a;}
template<typename T>T pairmax(T a,T b){return (a>b) ? a : b;}
template<typename T>T arrymax(T arr[],int arrsize){T m=arr[0]; for(int i=0;i<arrsize;i++){ if(arr[i]>m){m=arr[i];}} return m;}
template<typename T>T arrymin(T arr[],int arrsize){T m=arr[0]; for(int i=0;i<arrsize;i++){ if(arr[i]<m){m=arr[i];}} return m;}
template<typename T>T LCM(T a,T b){ return ((a*b)/__gcd(a,b));}
template<typename T>T ABS(T a){return a<0 ? (-1*a): a ;}
struct vpair{
    int a;
    int b;
    vpair(int a,int b){this->a=a;this->b=b;}
};
bool cmp(vpair &a,vpair &b){
    if(a.a<b.a)return true;
    else if(a.a==b.a){
        if(a.b<b.b)return true;
        else return false;
    }else{
        return false;
    }
}
ll a,b,m,n,ans;
ll arr[MAX5]={0};
ll brr[MAX5]={0};
bitset<MAX5> same=0;
int main(void){
    sf("%lld",&n);
    for(int i=0;i<n;i++)sf("%lld",&arr[i]);
    for(int i=0;i<n;i++)sf("%lld",&brr[i]);
    a=0,b=0;
    for(int i=0;i<n;i++){
        if(arr[i]<brr[i]){
            ans=brr[i]-arr[i];
            if(ans%2==0){
                a+=ans>>1;
            }else{
                a+=ans>>1;
                a++;
                b++;
            }
            continue;
        }
        if(arr[i]>brr[i]){
            b+=arr[i]-brr[i];
        }
    }
    if(a==b || a-b==1){
        pf("Yes\n");
    }else{
        if(a-b%2==0)pf("Yes\n");
        else pf("No\n");
    }
    return 0;
}