CF1578M The Mind

· · 题解

大概找到了这道题目的正确打开方式。

假设我们有 100 轮该怎么做?

显然,i 在第 i 轮打出,可以保证 100\% 胜率。

但我们只有 5 轮。

考虑最小值出现在每个位置的概率。

我们把 100 划分为 6 段,最小值在第 i 端就在第 i 轮打出。

所以希望每段的最小值出现概率和相等,这样子我们获胜的概率大概可以做到 \frac{5}{6}

出去不合法的情况可以让概率稍稍提升,压着 85\% 的线过。

讲一下怎么分为 6 段。其实由于保证纯随机,所以随机 1000 组统计一下每个位置的频率就好了,均分频率就好了。

int x[] = {0 , 4 , 8 , 14 , 20 , 34 , 100};

int main() {
    int n;
    read(n);
    for (int i = 1; i <= n; ++i) {
        int a[10] = {};
        for (int j = 1; j <= 5; ++j) cin >> a[j];
        for (int j = 1; j <= 5; ++j) {
            if(a[1] > x[j - 1] && a[1] <= x[j]) cout << "1.0 ";
            else cout << "0.0 ";
        }
        cout << endl;
    }
    return 0;
}