60tps,求助!
查看原帖
60tps,求助!
907430
corner_xiejunqi楼主2024/9/8 20:01

感觉思路没问题,但不知道那没想到!


#include<bits/stdc++.h>
using namespace std;
#define db double
int n;
db x,y,m;
struct node{
	db x1,y1;
	db x2,y2;
	db x3,y3;
	db m;
}e[2001]; 
bool cmp(node a,node b){
	return a.x1<b.x1;
}
db ans=0;
int main(){
	//1、声明变量,输入
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>x>>y>>m;
		e[i]={x,y,x+m,y,x,y+m,m};
		ans+=m*m/2;
	}
	//cout<<ans<<endl;
	//2、计算过程
	sort(e+1,e+1+n,cmp);
	for(int i=1;i<=n-1;i++){
		for(int j=i+1;j<=n;j++){
			db b=e[i].x2+e[i].y2;
			db xx=b-e[j].y1;
			if(xx>e[j].x1 && e[i].y2<=e[j].y2){
				db c=xx-e[j].x1;
				if(c>=e[j].m){
					ans-=e[j].m*e[j].m/2;
					//cout<<ans<<' '<<i<<' '<<j<<endl;
				}else{
					ans-=c*c/2;
					//cout<<ans<<' '<<i<<' '<<j<<endl;
				}
			}else if(e[i].y2<e[j].y3 && e[i].y2>e[j].y2 && e[i].x2>e[j].x3){
				if(e[i].x2>e[j].x3){
					db c=e[j].y3-e[i].y2;
					ans-=c*c/2;
					//cout<<ans<<' '<<i<<' '<<j<<endl;
				}else{
					db c=e[i].x2-e[j].y3;
					ans-=c*c/2;
					//cout<<ans<<' '<<i<<' '<<j<<endl;
				}
			}
		}
	}
	//3、输出
	cout<<fixed<<setprecision(1)<<ans;
	return 0;
}
2024/9/8 20:01
加载中...