开始复健。

用了不方便的算面积的方法,讨论了好多,还调了一个多小时- -

发现 double 和 longdouble 的四舍五入是随机的,有时候舍5有时候入5。

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long double x[3],y[3],x2,y2,tx,ty,dc;
double ans;
int bj=-1;
bool fx;
int main()
{
  for(int i=0;i<3;i++)
    scanf("%Lf%Lf",&x[i],&y[i]);
  for(int i=0;i<3;i++)
    {
      int d=i+1; if(d==3)d=0;
      /*printf("i=%d d=%d (%.1Lf,%.1Lf) (%.1Lf,%.1Lf)\n",
    i,d,x[i],y[i],x[d],y[d]);*/
      x2=x[i]-x[d]; if(x2<0)x2=-x2;
      y2=y[i]-y[d]; if(y2<0)y2=-y2;
      dc+=x2*y2;
      /*printf("  x1=%.1Lf y1=%.1Lf dc=%.1Lf\n",x2,y2,dc);
    printf("  tx=%.1Lf ty=%.1Lf\n",tx,ty);*/
      if(i==0)tx=x2,ty=y2,bj=2,fx=1;
      else
    {
      if(x2>tx&&y2>ty)
        {
          bj=(i+2)%3; fx=1; tx=x2; ty=y2;
        }
      if(x2>tx)tx=x2,fx=0; if(y2>ty)ty=y2,fx=0;
      //printf("i=%d d=%d fx=%d\n",i,d,fx);
    }
    }
  dc/=2;
  //printf("bj=%d fx=%d\n",bj,fx);
  if(bj!=-1&&fx)
    {
      double tmp=0;
      /*for(int i=0;i<3;i++)
    {
      printf("x[%d]=%.2Lf y[%d]=%.2Lf\n",
         i,x[i],i,y[i]);
    }
    printf("bj=%d\n",bj);*/
      if(bj!=1)
    {
      swap(x[bj],x[1]); swap(y[bj],y[1]);
    }
      /*for(int i=0;i<3;i++)
    {
      printf("x[%d]=%.2Lf y[%d]=%.2Lf\n",
         i,x[i],i,y[i]);
         }*/
      if((x[0]-x[2])*(y[0]-y[2])>=0)
    {
      if((y[0]-y[1])/(x[0]-x[1])<(y[0]-y[2])/(x[0]-x[2]))
        tmp=abs((x[1]-x[2])*(y[0]-y[1]));
      else tmp=abs((x[0]-x[1])*(y[1]-y[2]));
    }
      else
    {
      if((y[0]-y[1])/(x[0]-x[1])<(y[0]-y[2])/(x[0]-x[2]))
        tmp=abs((x[0]-x[1])*(y[1]-y[2]));
      else tmp=abs((x[1]-x[2])*(y[0]-y[1]));
    }
      dc+=tmp;
    }
  //printf("tx=%.1Lf ty=%.1Lf\n",tx,ty);
  ans=tx*ty-dc;
  /*for(int i=0;i<3;i++)
    {
      int d=i+1; if(d==3)d=0;
      long double px=x[i]-x[d]; if(px<0)px=-px;
      long double py=y[i]-y[d]; if(py<0)py=-py;
      if(tx<px||ty<py)
    {
      printf("NO\n");
      printf("x1=%Lf y1=%Lf px=%Lf py=%Lf\n",
         x1,y1,px,py);
      return 0;
    }
    }
    printf("YES\n");*/
  int d=floor(ans*1000); d%=10;
  if(d==5)ans+=0.001;
  printf("%.2lf\n",ans);
  return 0;
}
View Code

相关文章:

  • 2022-12-23
  • 2022-03-07
  • 2021-10-13
  • 2021-07-17
  • 2021-08-20
  • 2021-07-17
  • 2022-12-23
  • 2021-12-19
猜你喜欢
  • 2021-12-19
  • 2022-12-23
  • 2021-10-14
  • 2021-09-08
  • 2021-08-06
  • 2021-12-19
  • 2022-12-23
相关资源
相似解决方案