標籤:
題目描述
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****************************************************************/
2015安徽省賽 C.LU的困惑