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 (GCC 5.4.1) (judge verdict: Runtime Error)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(void){
    
    char str[1000];
    char *tok;
    int i,n,j1,j2;
    j1=0;
    j2=0;
    j2=j1;
    j1=j2;
    unsigned int a[10000],b[10000];
    
    fgets(str, sizeof(str), stdin);
    tok=strtok(str," ");
    n=strtol(tok,NULL,10);
    
    fgets(str, sizeof(str), stdin);
    tok=strtok(str," ");
    a[0]=strtol(tok,NULL,10);
    for(i=1;i<n;i++){
        tok=strtok(NULL," ");
        a[i]=strtol(tok,NULL,10);
    }
    
    fgets(str, sizeof(str), stdin);
    tok=strtok(str," ");
    b[0]=strtol(tok,NULL,10);
    for(i=1;i<n;i++){
        tok=strtok(NULL," ");
        b[i]=strtol(tok,NULL,10);
    }
    
    //long long alla=0;
    long long alla=0;
    long long allb=0;
    signed long long allc=0;
    //int flag=0; //0:unfinished 1:b-win 2:false 3:success
    //int fixa=0;
    //int fixb=0;
    
    
    for(i=0;i<n;i++){
        //printf("%lld\n",allc);
        allc+=b[i];
        allc-=a[i];
        if(a[i]>b[i]) allb+=a[i]-b[i];
        if(a[i]<b[i]) alla+=b[i]-a[i]+(b[i]-a[i])%2;
        
    }
    
    //printf("%lld,%lld,%lld",alla,allb,allc);
    j1=0;
    if(allc<0) j1=1;
    if(alla>allc*2) j1=1;
    if(allb>allc) j1=1;
    
    if(j1==0) printf("Yes");
    else printf("No");
    
    return 0;
    
    /*
    while(flag<=1 && alla<allb){
        for(i=fixa;i<fixa+n;i++){
            if(a[i%n]<b[i%n]){
                fixa=i%n;
                break;
            }
        }
        
        if(flag==0){
            j1=1;
            for(i=fixb;i<fixb+n;i++){
                if(a[i%n]>b[i%n]){
                    fixb=i%n;
                    j1=0;
                    break;
                }
            }
            if(j1==1){
                flag=1;
            }
        }
        if(flag==0){
            a[fixa]+=2;
            b[fixb]+=1;
            alla+=1;
        }else{
            a[fixa]+=2;
            b[fixa]+=1;
            alla+=1;
        }
        
        
    }
    */
    /*
        for(i=0;i<n;i++){
            printf("%d",a[i]);
        }
        printf("\n");
        for(i=0;i<n;i++){
            printf("%d",b[i]);
        }
        printf("\n\n");
    */
    

}