#include #include #include int cx[3], cy[3], rx[3], ry[3]; int rxp[3], ryp[3]; int POINTS = 10000000; int INF = 1000000; int r; double rr; inline double getRandCoord() { r = rand() % 1048576; r -= 524288; rr = r; rr /= 524288; return rr; } int main() { srand(time(0)); freopen("geo.in", "rt", stdin); int minx = INF, miny = INF, maxx = -INF, maxy = -INF; double varx, vary, midx, midy; for (int i = 0; i < 3; i++) { scanf("%d %d %d %d", &cx[i], &cy[i], &rx[i], &ry[i]); rxp[i] = rx[i] * rx[i]; ryp[i] = ry[i] * ry[i]; if (minx > cx[i] - rx[i]) { minx = cx[i] - rx[i]; } if (miny > cy[i] - ry[i]) { miny = cy[i] - ry[i]; } if (maxx < cx[i] + rx[i]) { maxx = cx[i] + rx[i]; } if (maxy < cy[i] + ry[i]) { maxy = cy[i] + ry[i]; } } varx = (maxx - minx) / 2; vary = (maxy - miny) / 2; midx = (minx + maxx) / 2; midy = (miny + maxy) / 2; int insidePt = 0; int in, j; double xx, yy, xxx, yyy; for (int i = 0; i < POINTS; i++) { xxx = getRandCoord(); xxx = midx + varx * xxx; yyy = getRandCoord(); //printf("%6lf\n", yyy); yyy = midy + vary * yyy; in = 0; for (j = 0; j < 3 && !in; j++) { xx = xxx - cx[j]; yy = yyy - cy[j]; if (xx * xx * ryp[j] + yy * yy * rxp[j] <= rxp[j] * ryp[j] + 0.00001) { //ry[j] * ry[j] * rx[j] * rx[j]) { in = 1; } } insidePt += in; //printf("%.5lf\n", r); } double v = (maxx - minx) * (maxy - miny); //printf("%d / %d \n", insidePt, POINTS); v *= insidePt; v /= POINTS; printf("%.6lf\n", v); return 0; }