刚学,#4 WA求助
查看原帖
刚学,#4 WA求助
62573
zzqDeco楼主2020/8/18 17:19

错误信息

Wrong Answer. wrong answer On line 1 column 1, read 2, expected 8.

希望有大佬看看/kel

#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;

struct point
{
  double x,y;
}p[100010],pv,s[100010];

int n;

double check(point a1,point a2,point b1,point b2)
{
  return (a1.x-a2.x)*(b1.y-b2.y)-(b1.x-b2.x)*(a1.y-a2.y);
}

double dis(point a,point b)
{
  return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}

bool cmp(point a,point b)
{
  double c=check(pv,a,pv,b);
  if(c>0||(c==0&&dis(pv,a)<dis(pv,b))) return 1;
  return 0;
}

int main()
{
  scanf("%d",&n);
  for(int i=1;i<=n;i++)
  {
    scanf("%lf%lf",&p[i].x,&p[i].y);
    if(i!=1&&p[i].y<p[1].y) swap(p[i],p[1]);
  }
  pv=p[1];
  sort(p+2,p+n+1,cmp);
  s[1]=p[1];
  int cnt=1;
  for(int i=2;i<=n;i++)
  {
    while(cnt>1&&(check(s[cnt-1],s[cnt],s[cnt],p[i])<=0)) cnt--;
    s[++cnt]=p[i];
  }
  s[++cnt]=p[1];
  int j=1;
  double ans=0;
  for(int i=1;i<=cnt;i++)
  {
    while(check(s[i],s[i+1],s[i],s[j])<check(s[i],s[i+1],s[i],s[j%cnt+1])) j=j%cnt+1;
    ans=max(ans,max(dis(s[i],s[j])*dis(s[i],s[j]),dis(s[i+1],s[j])*dis(s[i+1],s[j])));
  }
  printf("%.0lf",ans);
}
2020/8/18 17:19
加载中...