#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define TRUE 1
#define FALSE 0

int main() {
    double a, b, s, shinchi;
    int count, m, n;

    // 真の面積の値 (4つの単位円で囲まれた部分)
    shinchi = M_PI - 2.0;

    // 試行回数nの増加
    for (n = 10; n < 100000; n = n * 5) {
        count = 0;
        s = 0.0;

        // n回の試行
        for (m = 0; m < n; m++) {
            int inside = TRUE;  // すべての条件を満たしたかどうかのフラグ

            // 12個の乱数を生成して判定
            int i;  // ループカウンタの変数をここで宣言
            for (i = 0; i < 12; i++) {
                a = (double)rand() / RAND_MAX;
                b = (double)rand() / RAND_MAX;

                // 点 (a, b) がいずれかの円の外ならフラグを下げる
                if (!((a * a + b * b <= 1.0) &&
                      ((a - 1) * (a - 1) + b * b <= 1.0) &&
                      (a * a + (b - 1) * (b - 1) <= 1.0) &&
                      ((a - 1) * (a - 1) + (b - 1) * (b - 1) <= 1.0))) {
                    inside = FALSE;
                    break;  // 一つでも条件を満たさなければ終了
                }
            }

            if (inside) s += 1.0;  // 12個の乱数全てが条件を満たした場合のみカウント
            count++;
        }

        // 面積の推定値
        s /= count;

        // 誤差の出力
        printf("%d\t%f\n", n, fabs(s - shinchi));
    }

    return 0;
}
