zzuoj--10424--无聊的课(简单几何)
10424: 无聊的课
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 81 Solved: 16
[Submit][Status][Web Board]
Description
spy上课从来都不好好听讲(嗯,所以成绩也不太好)。
他上课常常画一些奇怪的东西画到课本上。
当然,画在课本上的大多数都是点,他老喜欢将所有的点和其中一个点连一条直线。
这里为了简化问题,只考虑点,且把课本当成坐标系,所有点都只和原点(0,0)连一条直线。
现在他有一个烦恼,就是不知道在课本上出现了多少条线。
你可以为他解决这个烦恼吗?
Input
有多组测试数据。
输入第一行为一个整数N,表示点的个数,然后第2~N+1行,每行两个整数x,y,代表点的坐标。
输入保证0 < N <= 100, 0 <= x <= 10000, 0 <= y <= 10000。
Output
对于每组测试数据,请输出一行,表示在课本上出现的线的条数。
Sample Input
3
1 2
1 3
1 4
Sample Output
3
HINT
原点可以看做本来就有的。
线可以重合,几条重合了的线需要当成一条线。
好坑,可以输入相同的点
#include<stdio.h> #include<string.h> #include<algorithm> #define E 1e-6 using namespace std; double a[110]; int main() { int n,i,j,cnt; int x,y; while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a)); int flog=0; for(i=0;i<n;i++) { scanf("%d%d",&x,&y); if(x==0&&y==0) flog=1; if(x==0) a[i]=10001; else a[i]=y*1.0/x; } sort(a,a+n); if(n==0) printf("0\n"); else { cnt=unique(a,a+n)-a; if(flog) cnt--; printf("%d\n",cnt); } } return 0; }