| ||||||||||
| 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 | |||||||||
Re:吐血啊 WA十几次 谁能帮忙瞧一下哇In Reply To:吐血啊 WA十几次 谁能帮忙瞧一下哇 Posted by:Fynable at 2008-09-09 19:41:00 > #include<iostream>
> using namespace std;
> #define N 50010
> #define MAX 100000
> struct Point {
> int x;
> int y;
> }P[N];
> int stack[N];
> int top;
> inline int dirc(Point p1,Point p2,Point p3) {
> return (p3.x-p1.x)*(p2.y-p1.y)-(p3.y-p1.y)*(p2.x-p1.x);
> }
> inline int range(Point p1,Point p2) {
> return (p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y);
> }
>
> int comp(const void* p1,const void* p2) {
> int d=dirc(P[0],*(Point*)p1,*(Point*)p2);
> if(d==0) return range(P[0],*(Point*)p1)-range(P[0],*(Point*)p2);
> return d;
> }
> int main() {
> int n;
> while(scanf("%d",&n)!=EOF) {
> top=-1;
> int i,j,pos=0,max=0,min=MAX;
> for(i=0;i<n;i++) {
> scanf("%d%d",&P[i].x,&P[i].y);
> if(P[i].y<min) {
> pos=i;
> min=P[i].y;
> }
> }
> swap(P[0],P[pos]);
> qsort(&P[1],n-1,sizeof(Point),comp);
> stack[++top]=0;
> stack[++top]=1;
> for(i=2;i<n;i++) {
> int d=dirc(P[stack[top-1]],P[stack[top]],P[i]);
> if(d<0) stack[++top]=i;
> else stack[top]=i;
> }
> for(i=0;i<top;i++)
> for(j=i+1;j<=top;j++)
> if(range(P[stack[i]],P[stack[j]])>max) {
> max=range(P[stack[i]],P[stack[j]]);
> }
> printf("%d\n",max);
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator