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 Go (1.6) (judge verdict: Wrong Answer)

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

func sumA(a []int64) int64 {
	var sum int64 = 0
	for _, x := range a {
		sum += x
	}
	return sum
}

func diffArray(a []int64, b []int64) []int64 {
	var c []int64
	for i, _ := range a {
		c = append(c, b[i]-a[i])
	}
	return c
}

func main() {
	var sc = bufio.NewScanner(os.Stdin)
	sc.Split(bufio.ScanWords)
	sc.Scan()
	n, _ := strconv.Atoi(sc.Text())

	var a, b []int64

	for i := 0; i < n; i++ {
		sc.Scan()
		tmp, _ := strconv.ParseInt(sc.Text(), 10, 64)
		a = append(a, tmp)
	}

	for i := 0; i < n; i++ {
		sc.Scan()
		tmp, _ := strconv.ParseInt(sc.Text(), 10, 64)
		b = append(b, tmp)
	}

	var sum int64 = 0
	for _, x := range diffArray(a, b) {
		if x >= 0 {
			sum += x
		} else {
			sum -= x * 2
		}
	}

	//fmt.Printf("sum: %v\ndiffA: %v\ndiff: %v\n", sum, diffArray(a, b), sumA(diffArray(a, b)))

	if sum/2 <= (sumA(diffArray(a, b))) {
		fmt.Printf("Yes\n")
	} else {
		fmt.Printf("No\n")
	}

	return
}