| ||||||||||
| 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 | |||||||||
谁帮忙看下,讨论里面的所有数据都过了,还是WA。。。#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
#define MAX 50006
struct Point{
int x;
int y;
};
Point zero;
inline int dist(Point &P1, Point &P2)
{
return (P1.x-P2.x)*(P1.x-P2.x)+(P1.y-P2.y)*(P1.y-P2.y);
}
inline int Product(Point &A, Point &B, Point &C)
{
return (A.x*B.y + B.x*C.y + C.x*A.y - A.x*C.y - B.x*A.y - C.x*B.y);
}
bool compare_point(Point P1, Point P2)
{
double a1 = atan((double)(P1.y-zero.y)/(P1.x-zero.x));
double a2 = atan((double)(P2.y-zero.y)/(P2.x-zero.x));
if(a1 == a2)
return dist(P1,zero) < dist(P2,zero);
else
return a1 < a2;
}
int main()
{
int N,min;
Point input[MAX];
Point stack[MAX];
int sp;
while(cin >> N)
{
min = 0;
sp = 1;
//memset(input, 0, sizeof(input));
//memset(stack, 0, sizeof(stack));
cin >> zero.x >> zero.y;
for(int i = 1; i < N; i++)
{
cin >> input[i].x >> input[i].y;
if((input[i].y < zero.y) || (input[i].y == zero.y && input[i].x < zero.x))
swap(zero, input[i]);
}
sort(input+1, input+N-1, compare_point);
//cout << "sorted:" << endl;
//cout << zero.x << " " << zero.y << endl;
//for(int i = 1; i < N; i++)
// cout << input[i].x <<" " << input[i].y << endl;
stack[0] = input[N-1];
stack[1] = zero;
for(int i = 1; i < N-1; i++)
{
if(Product(stack[sp-1], stack[sp], input[i]) >= 0)
stack[++sp] = input[i];
else
--sp;
}
// cout << "stack:" << sp << endl;
// for(int i =0;i <=sp;i++)
// cout << stack[i].x <<" " << stack[i].y << endl;
int maxdist = 0;
for(int i = 0; i < sp; i++)
for(int j = i+1; j <= sp; j++)
{
int temp = dist(stack[i], stack[j]);
if(temp > maxdist)
maxdist = temp;
}
cout << maxdist << endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator