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; }

浙公网安备 33010602011771号