#define _CRT_SECURE_NO_DEPRECATE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define all(v) v.begin(),v.end() using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef unsigned int ui; inline long double get_time(){ return (long double)clock()/CLOCKS_PER_SEC; }; //ld start_time,end_time; const ld epsylon = 1e-9; const ld pi = 3.141592653589; /////////////////////////POINT struct point{ ld x,y; bool real; point(ld x_ =0 ,ld y_ =0 ) { x = x_; y = y_; real = true; } friend ostream& operator<<(ostream& out, const point& a); ld dist_to(const point& A)const { return sqrt((x-A.x)*(x-A.x) + (y - A.y)*(y- A.y)); } operator bool() { return real; } }; ostream& operator<<(ostream& out, const point& a) { out<<"("<-epsylon && x < epsylon; } struct line{ ld a,b,c; line(const point A,const point B) { if(nula(A.x - B.x)) { a = 1.0; b = 0.0; c = -A.x; } else { b = (B.x - A.x); a = A.y - B.y; c = B.y*A.x - B.x*A.y; } } }; int sign(ld x) { if(x<-epsylon) return -1; if(x>epsylon) return 1; return 0; } line perpend(const line& a, const point& A) { point B; B.x = A.x + a.a; B.y = A.y + a.b; return line(A,B); } point intersect(const line& A ,const line& B) { ld tmp1 = A.b*B.a - A.a*B.b,tmp2=A.a*B.c - A.c*B.a; point tmp; if(nula(tmp1)) { tmp.real = false; return tmp; } tmp.y = tmp2/tmp1; if(nula(A.a)) { tmp.x = (-B.b*tmp.y - B.c)/B.a; } else { tmp.x = (-A.b*tmp.y - A.c)/A.a; } return tmp; } /////////////////////SEGMENT struct segment { point a,b; segment(const point& x, const point& y) { a = x; b = y; } ld length()const { return a.dist_to(b); } }; bool between(ld x,ld nachalo,ld krai) { return x > nachalo - epsylon && x < krai + epsylon; } struct tri{ point a, b, c; bool ravnob; double otnosh; bool isRavnob() { segment A(b, c); segment B(a, c); segment C(a, b); if (nula(A.length() - B.length()) || nula(A.length() - C.length()) || nula(B.length() - C.length())) return true; return false; } void getOtnosh() { segment A(b, c); segment B(a, c); segment C(a, b); if (nula(A.length() - B.length())) { otnosh = max(A.length(), C.length()) / min(A.length(), C.length()); return; } if (nula(B.length() - C.length())) { otnosh = max(A.length(), C.length()) / min(A.length(), C.length()); return; } if (nula(A.length() - C.length())) { otnosh = max(A.length(), B.length()) / min(A.length(), B.length()); return; } } }; double round2(double num) { int i; double mult = 100; double result = num; result *= mult; result = floor(result); return result; } vector groups; map mp; int n; int main() { freopen("tri.in","r",stdin); freopen("tri.out","w",stdout); //start_time = get_time(); //program scanf("%d", &n); int ax,ay,bx,by,cx,cy; tri buf; for (int i = 1; i <= n; ++i) { scanf("%d %d %d %d %d %d", &ax,&ay,&bx,&by,&cx,&cy); buf.a = point(ax,ay); buf.b=point(bx,by); buf.c=point(cx,cy); if (buf.isRavnob()) { buf.getOtnosh(); buf.otnosh = round2(buf.otnosh); mp[buf.otnosh]++; } } int res = 0; for (map :: const_iterator it = mp.begin(); it != mp.end(); ++it) { if (it->second > res) res = it->second; } printf("%d\n", res); //end program //end_time=get_time()-start_time; return 0; }