poj 1809

题意:有n个点,问组成的三角形中,有多少个三角形的面积是整数。给出公式:A=|x1y2 - y1x2 + x2y3 - y2x3 + x3y1 - y3x1|/2。

分析:当S = {x1y2,  y1x2,  x2y3,  y2x3,  x3y1,  y3x1}里,有偶数个奇数项时,面积为整数。考虑三个点(x1,y1) , (x2,y2) , (x3,y3)坐标的奇偶性,发现有一个点x y奇偶性不同,另外两点的x y奇偶性相同,或者一点x y奇偶性相同,另外两点(x2,y2), (x3,y3)奇偶性不同且x2与x3奇偶性不同时,S里有奇数个奇数项,即面积不为整数。

用0代表偶数,1代表奇数,当三点坐标为 00 11 01或 00 11 10 或 01 10 11 或01 10 00时,面积不为整数。

一共有C(n,3)个三角形,减去不为整数的三角形,即为所求。

 

 

int main(){
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    #endif

    int T; scanf("%d", &T);
    FOE(t, 1, T) {
        LL n, a[2][2] = {0};//0偶数 1奇数 a[i][j]为这种点的个数
        scanf("%I64d", &n);
        LL ans = n*(n-1)*(n-2)/6;//一共C(n, 3)个三角形

        FOR(i, 0, n){
            int x,y;
            scanf("%d%d", &x, &y);
            a[x&1][y&1]++;
        }

        LL s = (a[1][0]+a[0][1])*a[1][1]*a[0][0] + a[1][0]*a[0][1]*(a[1][1]+a[0][0]);//非整数三角形个数
        if(n<3) ans = s = 0;
        printf("Scenario #%d:\n%I64d\n\n", t, ans-s);
    }

    return 0;
}

 

转载于:https://www.cnblogs.com/ts65213/archive/2013/05/18/3086060.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值