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;
} 
posted @ 2022-03-19 11:28  Reanap  阅读(31)  评论(0编辑  收藏  举报