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

#define M_PI 3.14159265
#define NUM_RANDOM 12  // 乱数の個数を12に固定

int main() {
    double a[NUM_RANDOM], b[NUM_RANDOM], s, shinchi;
    int count, m, n, i;

    // 真の値（4つの単位円で囲まれた領域）
    shinchi = M_PI - 2.0;

    count = 0;

    // nの範囲で乱数の試行回数を増やす
    for (n = 10; n < 100000; n = n * 5) {
        count = 0;
        s = 0.0;

        for (m = 0; m < n; m++) {
            // 12個のランダムな点 (a[i], b[i]) を生成
            for (i = 0; i < NUM_RANDOM; i++) {
                a[i] = (double)rand() / RAND_MAX;
                b[i] = (double)rand() / RAND_MAX;
            }

            // 12個の点が4つの円に含まれるかチェック
            for (i = 0; i < NUM_RANDOM; i++) {
                if ((a[i] * a[i] + b[i] * b[i] <= 1.0) &&            // (0, 0) を中心とする円
                    ((a[i] - 1) * (a[i] - 1) + b[i] * b[i] <= 1.0) && // (1, 0) を中心とする円
                    (a[i] * a[i] + (b[i] - 1) * (b[i] - 1) <= 1.0) && // (0, 1) を中心とする円
                    ((a[i] - 1) * (a[i] - 1) + (b[i] - 1) * (b[i] - 1) <= 1.0)) { // (1, 1) を中心とする円
                    s += 1.0;
                }
            }
            count += NUM_RANDOM;  // 12個の点をカウント
        }

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

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

    return 0;
}
