80分求助
查看原帖
80分求助
1381052
tiangongyuanv楼主2024/10/3 08:24
#include<bits/stdc++.h>
using namespace std;
struct data
{
	int x,y;
	double s,m;
}f[2005];
bool vis[2005][2005];
bool cmp(data a,data b)
{
	return a.s>b.s;
}
int n;
double sum;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>f[i].x>>f[i].y>>f[i].m;
		f[i].s=f[i].m*f[i].m/2;
		sum+=f[i].s;
	}
	sort(f+1,f+n+1,cmp);
	for(int i=3;i<=n;i++)
	{
		if(f[i].x==f[i-2].x&&f[i].y==f[i-2].y&&f[i].m==f[i-2].m)
		{
			f[i].y=0;
			f[i].m=0;
			f[i].x=0;
			sum-=f[i].s;
			f[i].s=0;
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			if(i!=j)
			{
				bool g=1,h=1;
				if(f[i].m+f[i].x<f[j].x)
				{
					g=0;
				}
				if(f[i].m+f[i].y<f[j].y)
				{
					h=0;
				}
				int c=f[i].x-f[j].x;
				int d=f[i].y-f[j].y;
				int p=f[j].x+f[j].y+f[j].m-f[j].x;
				//int p=f[j].y+f[j].m;
				int z=f[i].x+f[i].y+f[i].m-f[j].x;
				if(c<=0&&g&&h)
				{
					if(d<=0)
					{
						double s1;
						if(p<=z)
						{
							s1=(f[j].m)*(f[j].m)/2;
						}
						else if(p>z)
						{
							if(f[i].m+d+c<=0)
							{
								s1=0;
							}
							else	s1=(f[i].m+d+c)*(f[i].m+d+c)/2;
						}
						//cout<<"i:"<<i<<"j:"<<j<<" "<<f[j].m<<" "<<s1<<" "<<f[j].m+d+c<<endl<<endl;
						//cout<<sum<<endl;
						sum-=s1;
						//cout<<sum<<endl;
					}
					else if(d>0)
					{
						double b,s1;
						if(p<=z)
						{
							if(f[j].m-d<=0)
							{
								s1=0;
							}
							else
							{
								b=f[j].m-d;
								s1=b*b/2;
							}
							//cout<<"i:"<<i<<"j:"<<j<<" "<<f[j].m<<" "<<s1<<endl<<endl;
						}
						else if(p>z)
						{
							if(f[i].m+c<=0)
							{
								s1=0;
							}
							else
							{
								b=f[i].m+c;
								s1=b*b/2;
							}	
							//cout<<"i:"<<i<<"j:"<<j<<" "<<f[j].m<<" "<<s1<<endl<<endl;
						}
						//cout<<sum<<endl;
						sum-=s1;
						//cout<<sum<<endl;
					}
				}
				else if(c>0&&g&&h)
				{
					double g,s1;
					if(d<=0)
					{
						if(p<=z)
						{
							if(f[j].m-c<=0)
							{
								s1=0;
							}
							else
							{
								g=f[j].m-c;
								s1=g*g/2;
							}	
							//cout<<"i:"<<i<<"j:"<<j<<" "<<f[j].m<<" "<<s1<<endl<<endl;
						}
						else if(p>z)
						{
							if(f[i].m+d<=0)
							{
								s1=0;
							}
							else
							{
								g=f[i].m+d;
								s1=g*g/2;
							}
							//cout<<"i:"<<i<<"j:"<<j<<" "<<f[j].m<<" "<<s1<<endl<<endl;
						}
						//cout<<sum<<endl;
						sum-=s1;
						//cout<<sum<<endl;
					}
					else if(d>0)
					{
						if(c+d<f[j].m)
						{
							double b=f[j].m-c-d;
							double s1=b*b/2;
							//cout<<"i:"<<i<<"j:"<<j<<" "<<f[j].m<<" "<<s1<<endl<<endl;
							//cout<<sum<<endl;
							sum-=s1;
							//cout<<sum<<endl;
						}
					}
				}
			}
		}
	}
	if(!sum)
	{
		sum=0; 
	}
	printf("%.1f",sum);
	return 0;
}
2024/10/3 08:24
加载中...