「Andrey and Problem」题解

做法超级简单,先从小到大排序,然后从后向前扫,选上更优就选上,不然就 break


证明。

反证法:假设选择集合不是后缀

假设现在有一个选择集合 S(存储的是下标),找到这个集合出现的空隙(即 iS,i1S)。

T=Si1

f(P)=Π(1xpi),g(P)=xpi1xpi,a=xi,b=xi1

则有:a>b

容易得到计算答案的式子: f(P)g(P)

即证 f(Ti)g(Ti)>f(Ti1)g(Ti1)

即证 f(T)(1a)(g(T)+a1a)>f(T)(1b)(g(T)+b1b)

即证 f(T)g(T)(1a)+a1a(1a)f(T)>f(T)g(T)(1b)+b1b(1b)f(T)

即证 f(T)g(T)(1a)+af(T)>f(T)g(T)(1b)+bf(T)

即证 g(T)g(T)a+a>g(T)g(T)b+b

即证 (1g(T))a>(1g(T))b

1>g(T)>0,a>b

得证。


#include <map>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;

template <typename T> T Max (T x, T y) { return x > y ? x : y; }
template <typename T> T Min (T x, T y) { return x < y ? x : y; }
template <typename T> T Abs (T x) { return x > 0 ? x : -x; }
template <typename T>
void read (T &x) {
	x = 0; T f = 1;
	char ch = getchar ();
	while (ch < '0' || ch > '9') {
		if (ch == '-') f = -1;
		ch = getchar ();
	}
	while (ch >= '0' && ch <= '9') {
		x = (x << 3) + (x << 1) + ch - '0';
		ch = getchar ();
	}
	x *= f;
}
template <typename T>
void write (T x) {
	if (x < 0) {
		x = -x;
		putchar ('-');
	}
	if (x < 10) {
		putchar (x + '0');
		return;
	}
	write (x / 10);
	putchar (x % 10 + '0');
}
template <typename T>
void print (T x, char ch) {
	write (x); putchar (ch);
}

const int Maxn = 100;
const double eps = 1e-10;

int n;
double a[Maxn + 5];

int main () {
//	freopen (".in", "r", stdin);
//	freopen (".out", "w", stdout);
	cin >> n; for (int i = 1; i <= n; i++) cin >> a[i];
	sort (a + 1, a + 1 + n);
	if (Abs (a[n] - 1) < eps) {
		printf ("%.12lf", 1.0);
		return 0;
	}
	double t = 1, tot = 0;
	for (int i = n; i >= 1; i--) {
		if (t * (1 - a[i]) * (tot + a[i] / (1 - a[i])) < t * tot)
			break;
		t *= (1 - a[i]);
		tot += a[i] / (1 - a[i]);
	}
	printf ("%.12lf", t * tot);
	return 0;
}
posted @   C2022lihan  阅读(44)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示