题目描述
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
用set容器
#include<iostream>
#include<cstdio>
#include<cstring>
#include<set> using namespace std;
long long d[],c[];
double add(int ax,int bx,int ay,int by)
{
double tx,ty;
tx=double(bx-ax);
ty=double(by-ay);
if(tx==){return ;}
return ty/tx;
} int main()
{ set<double> seting;
int T,m,i,j; double num;
scanf("%d",&T);
while(T>=)
{
scanf("%d",&m);
for(i=;i<=m;i++)
{
scanf("%lld %lld",&d[i],&c[i]);
}
for(i=;i<=m;i++)
{
for(j=i+;j<=m;j++)
{
num=add(d[i],d[j],c[i],c[j]);
if(num!=)
{
set<double>::iterator it;
it=seting.find(num);
if(it==seting.end())
{
seting.insert(num);
}
}
}
}
printf("%d\n",seting.size());
seting.clear();
T--;
}
return ;
}
/**************************************************************
Problem: 1207
User: 2014217052
Language: C++
Result: 正确
Time:254 ms
Memory:4572 kb
****************************************************************/