CodeForces 557B(贪心)

原链接: CodeForces 557B.

挺简单一贪心哈。

题目大意:你拥有w毫升的水,2*n个杯子,每个杯子分别能装a[i]毫升的水,你有n个女性朋友和n个男性朋友,你要给所有人倒水,同时满足:

  1. 每个女性朋友水杯里拥有同样多的水;
  2. 每个男性朋友水杯里拥有同样多的水;
  3. 男性朋友水杯里的水要是女性朋友的两倍。

先上AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+10;
double cap[N];
double w;
int main()
{
int n;
scanf("%d %lf",&n,&w);
n*=2;
for(int i=0;i<n;++i)
scanf("%lf",&cap[i]);
sort(cap,cap+n);
double ans=w;
if(cap[n/2]>=2 * cap[0])
{
double k=n / 2 * 3 * cap[0];
ans=min(ans,k);
}
else
{
double k=1.0 * n/2 * cap[n/2] / 2 * 3;
ans=min(ans,k);
}
printf("%f\n",ans);
return 0;
}

最好一开始就用double,避免因为int和double的精度问题WA。

先排个序,a[0]是女生最多能拥有的水量,a[n]是男生最多能拥有的水量

如果2*a[0]<=a[n],那么所有女生都是a[0],所有男生都是a[0]*2

否则所有女生都是a[n]/2,所有男生都是a[n]

然后再和w比较一下,取小的那一个,最后%f输出一下,OK,A了。

发布了3 篇原创文章 · 获赞 3 · 访问量 99

猜你喜欢

转载自blog.csdn.net/qq_43586463/article/details/94356893