B - 格子点と整数: AtCoder Regular Contest 018

問題文
諸君、私は整数が好きだ。 私は格子点が好きだ。 私は面積が好きだ。 私は三角形が好きだ。 私は座標平面上の、頂点が全て格子点上にある、面積が整数の三角形が大好きだ。 格子点の集合をみたとき、その中の任意の 3 点を選んで作ることができる面積が整数の三角形の個数を数えるときは心が踊る。 心が踊るが、格子点が多いと数えるのが面倒臭い。 ぜひ有能なプログラマーである諸君に私の代わりに数えてほしい。 N 個の格子点を与えるので、その中の任意の 3 点を選んで作ることができる、面積が整数の三角形の個数を数えるプログラムを作って欲しい。面積が 0 の>三角形は三角形とは認めん! ちなみに、格子点というのは座標平面上の点 (x,y) のうち x も y も整数である点のことである。 atcoder

結果: WA

#include <iostream>
#include <cstdlib>
#include <vector>
#include <utility>
#include <string>
#include <algorithm>
using namespace std;

const int NMAX = 100;
typedef pair<int, int> pii;
vector<pii> xy;

int main(){
    int N;
    int num = 0;
    for (int i =0; i <N; ++i) {
        int x, y;
        cin >> x >> y;
        xy.push_back(make_pair(x, y));
    }
    sort(xy.begin(), xy.end());

    for (int i =0; i <N; ++i) {
        for (int j =i+1; j <N; ++j) {
            for (int k =j+1; k <N; ++k) {
                int area = abs( (xy[j].first-xy[i].first)*(xy[j].second-xy[i].second) - (xy[k].first-xy[i].first)*(xy[k].second-xy[i].second) );
                if ( area != 0 && area %2 ==0 ) {
                    num += 1;
                }
            }
        }
    }
    cout << num << endl;
    
    return 0;
}