Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
优化下 Time: 94MS 不知c32ms如何做的,知道的告诉下Source Code Problem: 1118 User: dawei007 Memory: 160K Time: 94MS Language: C++ Result: Accepted Source Code #include<stdio.h> #include <algorithm> using namespace std; struct POS { int x,y; }; struct name_compare { bool operator()(const POS& a, const POS& b) const { return a.x<b.x; } }; int main() { int i,j,n; POS p[700]; while(scanf("%d",&n)) { if(n==0) break; int max1=0,t=0; int max2=0; for(i=0;i<n;i++) { scanf("%d %d",&p[i].x,&p[i].y); } sort(p, p+n, name_compare()); for(i=0;i<n-1;i++) { t=1; while(p[i].x==p[i+1].x) { ++i;++t; } if(t>max1) max1=t; } double slope[700]; for(i=0;i<n;i++) { int pos=0; for(j=i;j<n;j++)//在这优化下(因为无论如何,那条斜率的已经算过了) { if(i!=j && p[i].x!=p[j].x) slope[pos++] = ( p[i].y-p[j].y )*1.0/(p[i].x-p[j].x); } sort(slope,slope+pos); int max=0; for(j=0;j<n-1;j++) { t=1; while(slope[j]==slope[j+1]) { ++j;++t; } if(t>max) max=t; } ++max; if(max>max2) max2=max; } printf("%d\n",max1>max2?max1:max2); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator