| ||||||||||
| 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 | |||||||||
初用graham 结果TLE了,哪位仁兄帮帮我看一下: 谢谢#include <iostream>
#include <fstream>
using namespace std;
int pn;
struct point{
int x,y;
void print(){
cout<<x<<" "<<y<<endl;
}
} p[50010];
int stack[50010];
int sn;
int caldis(point p1,point p2){
return ( (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y) );
}
int xmult(point p1,point p2,point p0){
return ( (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y) );
}
int det(int x1,int y1,int x2,int y2){
return ( x1*y2-x2*y1 );
}
int cmp(const void *a1,const void *a2){
point s=*(point *)a1;point t=*(point *)a2;
int sx=s.x-p[0].x;int sy=s.y-p[0].y;
int tx=t.x-p[0].x;int ty=t.y-p[0].y;
int res=det(sx,sy,tx,ty);
if(res==0){
return ( tx*tx+ty*ty-sx*sx-sy*sy );
}
return res;
}
void init(){
int min=0;
int i,j,k;
for(i=1;i<pn;i++){
if(p[i].y<p[min].y||p[i].y==p[min].y&&p[i].x<p[min].x){
min=i;
}
}
std::swap(p[min],p[0]);
qsort(&p[1],pn-1,sizeof(p[0]),cmp);
int tmpn=2;
for(i=2;i<pn;i++){ //除去极角相同的点
if(xmult(p[i],p[i-1],p[0])!=0){
p[tmpn++]=p[i];
}
}
pn=tmpn;
/* for(i=0;i<pn;i++)
p[i].print();
cout<<pn<<endl;
*/
}
void convex(){
int i,j,k;
sn=0;
stack[sn++]=0;
stack[sn++]=1;
stack[sn++]=2;
int a=stack[sn-1];int b=stack[sn-2];
for(i=3;i<pn;i++){
while(xmult(p[i],p[a],p[b])<=0){
sn--;
a=stack[sn-1];b=stack[sn-2];
}
stack[sn++]=i;
}
/* for(i=0;i<sn;i++){
p[stack[i]].print();
}
*/
}
void main(){
// ifstream cin("data.txt");
cin>>pn;
int i,j,k;
for(i=0;i<pn;i++){
cin>>p[i].x>>p[i].y;
}
init();
convex();
int maxdis=0;
int mark[50010];
memset(mark,0,sizeof(mark));
for(i=0;i<pn;i++){
for(j=0;j<pn;j++){
if(i==j||mark[j]==1)continue;
int curdis=caldis(p[i],p[j]);
if(curdis>maxdis)maxdis=curdis;
}
mark[i]=1;
}
cout<<maxdis<<endl;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator