1052
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <math.h> #include <limits.h> using namespace std; // Datatypes typedef vector<int> vi; typedef vector<string> vs; typedef vector<vi> vvi; typedef pair<int,int> ii; typedef long long ll; typedef long double ld; // Define #define sz(a) int((a).size()) #define pb push_back #define all(c) (c).begin(),(c).end() #define present(c,x) ((c).find(x) != (c).end()) #define cpresent(c,x) (find(all(c),x) != (c).end()) #define FOR(_i,_n) for(int (_i) = 0; (_i) < (_n); (_i)++) #define mp make_pair struct point { int x,y; }; struct line { int a,b,c; }; void buildLine(point& a, point& b, line &l) { l.a = a.y - b.y; l.b = b.x - a.x; l.c = -l.a*a.x - l.b*a.y; } bool onLine(point& a, line& l) { if((l.a*a.x + l.b*a.y + l.c) == 0) return true; else return false; } int main(void) { int n; point m[200]; int s[200][200] = {0}; cin >> n; FOR(i,n) cin >> m[i].x >> m[i].y; FOR(i,n) { FOR(j,n) { if(i == j) continue; line l; bool p = false; s[i][j] = 2; if((m[i].x == m[j].x) && (m[i].y == m[j].y)) p = true; if(!p) buildLine(m[i], m[j], l); FOR(t,n) { if((t == i) || (t == j)) continue; if(p) { if((m[i].x == m[t].x) && (m[i].y == m[t].y)) s[i][j]++; } else { if(onLine(m[t], l)) s[i][j]++; } } } } int r = 0; FOR(i, n) { FOR(j,n) { r = max(r,s[i][j]); } } cout << r; return 0; }
page revision: 0, last edited: 05 May 2007 08:06