解析
S = 1 / 2 ∗ ( ∣ ( x i − x z ) ∗ ( y j − y z ) + ( x j − x z ) ∗ ( y i − y z ) ∣ ) S = 1/2*(|(x_i-x_z)*(y_j-y_z)+(x_j-x_z)*(y_i-y_z)|) S=1/2∗(∣(xi−xz)∗(yj−yz)+(xj−xz)∗(yi−yz)∣)
所以如果某个三角形面积为整数,那么其计算后为偶数即可
统计 0 / 1 , 1 / 0 , 0 / 0 , 1 / 1 0/1,1/0,0/0,1/1 0/1,1/0,0/0,1/1四种情况的个数,然后枚举 2 6 2^6 26 种情况
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans=0,cnt[2][2];
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
ll x,y;
cin>>x>>y;
cnt[(x%2+2)%2][(y%2+2)%2]++;
}
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
for(int k=0;k<2;k++){
for(int l=0;l<2;l++){
for(int p=0;p<2;p++){
for(int q=0;q<2;q++){
int u=(k-i)*(q-j)-(l-j)*(p-i);
if((u%2+2)%2==1){
ans+=cnt[i][j]*cnt[k][l]*cnt[p][q];
}
}
}
}
}
}
}
cout<<ans/6;
}