问题 H: LU的困惑
题目描述
Master LU 非常喜欢数学,现在有个问题:在二维空间上一共有n个点,LU每连接两个点,就会确定一条直线,对应有一个斜率。现在LU把平面内所有点中任意两点连线,得到的斜率放入一个集合中(若斜率不存在则不计入集合),他想知道这个集合中有多少个元素。
 
输入
第一行是一个整数T,代表T组测试数据
 
每组数据第一行是一个整数n,代表点的数量。2<n<1000
接下来n行,每行两个整数,0<=x<10000,0<=y<10000,代表点的坐标
输出
输出斜率集合中有多少个元素
样例输入复制
2 4 1 1 2 2 3 3 3 6 4 1 1 2 2 2 0 3 1
样例输出复制
3 3
#include<stdio.h> #include<iostream> #include<malloc.h> #include<algorithm> using namespace std; double k(int,int,int ,int); int main() { double *res=(double*)malloc(sizeof(double)*1000000); int num=0; int n; scanf("%d",&num); while(num--) { for(int i=0;i<1000000;i++) res[i]=0; scanf("%d",&n); int *x=(int *)malloc(sizeof(int)*(n+1)); int *y=(int *)malloc(sizeof(int)*(n+1)); for(int i=1;i<=n;i++) { scanf("%d%d",&x[i],&y[i]); } int len=0; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { res[len++]=k(x[i],y[i],x[j],y[j]); } } sort(res,res+len); // for(int i=0;i<len;i++) // printf("%f\n",res[i]); int s=0; for(int i=0;i<len-1;i++) { if(res[i]!=res[i+1]) s++; } printf("%d\n",s); } } double k(int x1,int y1,int x2,int y2) { return ((double)(x1-x2))/(y1-y2); }
                    
                
                
            
        
浙公网安备 33010602011771号