10分求助,样例过了
查看原帖
10分求助,样例过了
760740
HROI_GJOI_CLOI楼主2022/11/5 11:55
#include<bits/stdc++.h>
using namespace std;
struct tri{
	double x,y,m;
} a[2009];
int n;
double ans;
double area(double d){
	return d * d / 2.0;
}
bool cmp(tri t1,tri t2){
	if(t1.x != t2.x)
		return t1.x < t2.x;
	return t1.y < t2.y;
}
double check(int i, int j){
	double x1 = a[i].x,x2 = a[j].x,y1 = a[i].y,y2 = a[j].y,m1 = a[i].m,m2 = a[j].m;
	if(x2 + y2 >= x1 + y1 + m1)
		return 0;
	if(x2 + m2 < x1 + m1)
		return area(m2);
	return area(x1 + m1 - y2 + y1 - x2);
}
int main(){
	scanf("%d", &n);
	for(int i = 1;i <= n;i++){
		scanf("%lf%lf%lf", &a[i].x, &a[i].y, &a[i].m);
		ans += area(a[i].m);
	}
	sort(a + 1,a + n + 1,cmp);
	for(int i = 1;i < n;i++){
		for(int j = i + 1;j <= n;j++){
			ans -= check(i,j);
		}
	}
	printf("%.1lf",ans);
	return 0;
}
2022/11/5 11:55
加载中...