http://poj.org/problem?id=3668
水题,STL
1 #include <stdio.h> 2 #include <set> 3 4 using namespace std; 5 6 set<pair<int, int> > set1; 7 8 int gcd(int x, int y) 9 { 10 return y? gcd(y, x%y): x; 11 } 12 13 int abs(int x) 14 { 15 return x<0? -1*x: x; 16 } 17 18 struct P 19 { 20 int x, y; 21 }p[1234]; 22 23 int main() 24 { 25 int n, i, j; 26 int x, y, gcd_xy; 27 while(~scanf("%d", &n)) 28 { 29 set1.clear(); 30 for(i=1; i<=n; i++) 31 { 32 scanf("%d%d", &p[i].x, &p[i].y); 33 } 34 for(i=1; i<=n-1; i++) 35 { 36 for(j=i+1; j<=n; j++) 37 { 38 x = p[i].x - p[j].x; 39 y = p[i].y - p[j].y; 40 if(x < 0) 41 { 42 x *= -1; 43 y *= -1; 44 } 45 gcd_xy = gcd(abs(x), abs(y)); 46 x /= gcd_xy; 47 y /= gcd_xy; 48 if(x == 0) 49 { 50 y = 1; 51 } 52 if(y == 0) 53 { 54 x = 1; 55 } 56 //printf("%d %d : %d %d ", i, j, x, y); 57 set1.insert(make_pair(x, y)); 58 } 59 } 60 printf("%d ", (int)set1.size()); 61 } 62 return 0; 63 }