大概找到了这道题目的正确打开方式。
假设我们有 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;
}