#include #include #include #include using namespace std; int n; double eps = 1e-9; struct Circle { int x; int y; int r; }; vector v(50); vector > q; double F(double x) { q.clear(); pair temp; for (int i = 0; i < n; i++) { if (fabs(x - v[i].x) < v[i].r) { temp.first = -sqrt(v[i].r*v[i].r - (v[i].x - x)*(v[i].x - x)) + v[i].y; temp.second = true; q.push_back(temp); temp.first = sqrt(v[i].r*v[i].r - (v[i].x - x)*(v[i].x - x)) + v[i].y; temp.second = false; q.push_back(temp); } } sort(v.begin(), v.end()); int rang = 0; double l, s = 0; for (int i = 0; i < q.size(); i++) { if (q[i].second) { if (rang == 0) l = q[i].first; rang++; } else rang--; if (i != 0 && rang == 0) { s += q[i].first - l; } } return s; } double S(double a, double b) { return (F(a) + F(b) + 4 * F((a + b) / 2))*(b - a) / 6; } double Square(double a, double b) { double mid = (a + b) / 2; if (fabs(S(a, b) - (S(a, mid) + S(mid, b))) < eps) return S(a, b); else return (S(a, mid) + S(mid, b)); } int main() { cin >> n; Circle temp; double l, r; cin >> v[0].x >> v[0].y >> v[0].r; l = v[0].x - v[0].r; r = v[0].x + v[0].r; for (int i = 1; i < n; i++) { cin >> v[i].x >> v[i].y >> v[i].r; if (v[i].x - v[i].r < l) l = v[i].x - v[i].r; if (v[i].x + v[i].r > r) r = v[i].x + v[i].r; } cout << Square(l, r) << endl; return 0; }