题解:P10557 [ICPC2024 Xi'an I] Dumb Robot
honglan0301 · · 题解
分析
对于一组
那么当
因此只需求出每组
代码
核心代码如下。halfcut 函数的作用是求出
double PolyArea(Point *P,int n);
int halfcut(Line *L,int n,Point *P);
signed main()
{
cin>>ln;
for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) cin>>a[i][j];
for(int i=1;i<=ln;i++) for(int j=1;j<=3;j++) cin>>p[i][j];
for(int i=1;i<=ln;i++)
{
for(int j=1;j<=3;j++)
{
for(int k=1;k<=3;k++)
{
val[i][j]+=p[i][k]*a[j][k];
}
}
A[i]=val[i][1]-val[i][3]; B[i]=val[i][2]-val[i][3]; C[i]=val[i][3];
//cout<<A[i]<<" "<<B[i]<<" "<<C[i]<<endl;
}
ln++; A[ln]=1; B[ln]=0; C[ln]=0;
ln++; A[ln]=0; B[ln]=1; C[ln]=0;
ln++; A[ln]=-1; B[ln]=-1; C[ln]=1;
for(int i=1;i<=ln;i++) ins(A[i],B[i],C[i]); //Ax+By+C>=0
if(!flag)
{
cout<<"0.0000000"<<endl; return 0;
}
int totd=halfcut(L,totl,as); //半平面交
cout<<PolyArea(as,totd)/0.5<<endl; //凸包求面积
}