Boxes
大佬的题解:
思路:只要使用一次hints,以后的每一步都可以知道剩下多少个黑球,所以最少花费有两种情况。
一、全部盒子开一遍
二、先用一次hints,再按花费小到大开盒子。注意到,每开一个盒子都有一定概率直接结束(后面全都是白球或全都是黑球)
结论
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e5 + 9;
int n;
double a[maxn], pre[maxn], c;
void work()
{
cin >> n >> c;
for(int i = 1; i <= n; ++i) scanf("%lf", &a[i]);
sort(a+1,a+1+n);
double ans = c;
for(int i = 1; i <= n; ++i)
{
ans += pre[i - 1] * pow(0.5, n - i + 1);
pre[i] = pre[i - 1] + a[i];
}
printf("%.7f\n", min(ans, pre[n]));
}
int main()
{
//int TT;cin>>TT;while(TT--)
work();
return 0;
}
Queuing
额,这是一道算期望的题目,我没推出来,赛后看到代码很震惊
#include <cstdio>
int main() {
double a, b; scanf("%lf %lf", &a, &b);
printf("%lf\n", (b - 1) / a + 1);
return 0;
}