1 条题解

  • 0
    @ 2024-11-29 10:02:22

    圆心解法

    1. 在两个维度上取圆内的点坐标的平均值为圆心。
    2. 在两个维度上计算圆内的点坐标的极值,取中点为圆心。
    3. 在两个维度上切片,取圆内的点密度最大的坐标为圆心。
    4. 在两个维度上取到圆内所有点距离之和最小的坐标为圆心。

    半径解法

    1. 取圆内的点距圆心的最大距离为半径。
    2. 计算圆内的点距圆心的平均距离,利用积分折算为半径。
    3. 计算圆内的点的密度,估计圆的面积,利用圆的面积公式折算为半径。
    4. 在两个维度上计算圆内的点坐标的极值,取极差为直径,然后折算为半径。

    参考程序

    // 圆心解法:解法 1
    // 半径解法:解法 3
    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        freopen("circle.in", "r", stdin);
        freopen("circle.out", "w", stdout);
        int n = 100000, r = 1000;
        long long oc = 0;
    	long double xs = 0, ys = 0;
        for (int i = 1; i <= n; i++)
        {
        	long double x, y;
        	int z;
        	cin >> x >> y >> z;
        	if (z) oc++, xs += x, ys += y;
    	}
    	cout << fixed << setprecision(3);
    	cout << xs / oc << ' ' << ys / oc << endl;
    	cout << sqrtl(oc * 1.0 * r * r / n / acos(-1)) << endl;
    	return 0;
    }
    
    • 1

    信息

    ID
    110
    时间
    1000ms
    内存
    512MiB
    难度
    1
    标签
    递交数
    21
    已通过
    5
    上传者