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