CodeForces 21B两点集

http://codeforces.com/problemset/problem/21/B

题意:给你两个点集,由两个方程所决定:A1x + B1y + C1 = 0; A2x + B2y + C2 = 0.让你判断交点个数。

关键是不能被惯性思维所迷惑,给出两个方程,就想当然的以为是两条直线判断相交平行重叠;要注意当A1=B1=C1=0时,x,y是任意的,所以包含所有的点,当A1=B1=0,C1!=0时,为空集,再把两个方程当成咱们所熟悉的两条直线就行了。

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    int  a,b,c;
    int  A,B,C;
    while(scanf("%d%d%d%d%d%d",&a,&b,&c,&A,&B,&C)!=EOF)
    {
        if((a==0&&b==0)||(A==0&&B==0))
        {
            if((a==0&&b==0&&c!=0)||(A==0&&B==0&&C!=0))
                printf("0\n");
            else printf("-1\n");
        }
        else if(b==0||B==0)
        {
            if((b==0&&B!=0)||b!=0&&B==0)
                printf("1\n");
            else
            {
                if(c*A==C*a)printf("-1\n");
                else printf("0\n");
            }
        }
        else
        {
            if(a*B==A*b)
            {
                if(c*B!=C*b)
                    printf("0\n");
                else printf("-1\n");
            }
            else
                printf("1\n");
        }
    }
    return 0;
}

 

posted @ 2013-08-06 16:57  拼搏今朝 努力奋进  阅读(148)  评论(0)    收藏  举报