题目大意
给你 n n n 个男生和女生, 给定 w w w 毫升水量 ,再给你 2 n 2n 2n 个数 a i a_i ai ,告诉你男生喝水量是女生的 2 2 2 倍,并且茶杯只能倒 w w w 毫升水,让你求出最大倒水量是多少。
分析
一道贪心题。
显然男生比女生的水量大,那么就要让男生的茶杯比女生的大一些,所以排序。
sort(a + 1, a + n * 2 + 1);
但是结果 c n t cnt cnt 不能超过一次倒水量,所以将它和 x × 3 × n x \times 3 \times n x×3×n 进行比较,取较小值。
cnt = min (x * 3 * n, w * 1.0000000);
最后记得保留精度即可。
printf("%.7lf", cnt);
Code
#include <bits/stdc++.h>
using namespace std;
int n, w;
double x, cnt;
double a[200007];
signed main()
{
scanf ("%d%d", &n, &w);
// 有2*n个人,输入2*n个茶杯
for( int i = 1; i <= 2 * n; i++)
{
scanf ("%lf", &a[i]);
// 7位精度
a[i] *= 1.0000000;
}
// 排序
sort(a + 1, a + n * 2 + 1);
// 一次倒的x要在女生<=的a[1]和2*男生<=的a[n+1]里选较小值
x = min (a[1], a[n + 1] / 2);
// 在总量和一次倒的水量取较小值,作为答案
cnt = min (x * 3 * n, w * 1.0000000);
// 输出保留7位小数
printf("%.7lf", cnt);
return 0;
}
完结撒花。