pku 3668 Game of Lines hash
題意:
給出一些點,求出由這些點可以構成多少斜率不同的線段。
解法:
O(N2)枚舉直線,然后hash記錄斜率(要特別考慮斜率不存在的情況),注意浮點數的比較精度控制在1e-8或者用pair來通分比較。。
代碼:
1
# include <iostream>
2
# include <cmath>
3
using namespace std;
4
# include <set>
5
struct cmp
6

{
7
bool operator()(const double a,const double b) const
8
{
9
return fabs(a-b)>1e-8&&a<b;
10
}
11
};
12
set<double,cmp> refer;
13
bool sp=0;
14
int data[201][2];
15
int main()
16

{
17
int n;
18
cin>>n;
19
for(int i=0;i<n;i++)
20
{
21
cin>>data[i][0]>>data[i][1];
22
for(int j=0;j<i;j++)
23
if(data[j][0]==data[i][0])
24
sp=1;
25
else
26
refer.insert((data[j][1]-data[i][1])/(double)(data[j][0]-data[i][0]));
27
}
28
cout<<refer.size()+sp<<endl;
29
// system("pause");
30
return 0;
31
}
32

2

3

4

5

6



7

8



9

10

11

12

13

14

15

16



17

18

19

20



21

22

23

24

25

26

27

28

29

30

31

32

posted on 2010-12-05 01:26 yzhw 閱讀(162) 評論(0) 編輯 收藏 引用 所屬分類: data struct 、geometry&phycise