Codeforces Round #311 (Div. 2)--Pasha and Tea--二分

来源:互联网 发布:中石化邮箱pop端口号 编辑:程序博客网 时间:2024/06/05 18:54

原题链接:https://acm.bnu.edu.cn/v3/problem_show.php?pid=49673

题意:一壶茶w毫升,n个男,n个女,要求男生分到的茶都一样多;女生一样。但是每个男生分到的毫升是每个女生的两倍,求w的最大值。

分析:首先排序,分为两组,1–n,n+1–2*n,很容易知道前面是女生的,后面是男生的。设一个女生分到x毫升,则有n*x+n*(2*x)<=w,求得x<=w/(3*n)。最后二分[ 0 , min(x , a[ 1 ]) ]。

AC代码:

#define _CRT_SECURE_NO_DEPRECATE#include<iostream>#include<vector>#include<cstring>#include<queue>#include<stack>#include<algorithm>#include<cmath>#include<string>#include<stdio.h>#define INF 1000000000#define EPS 1e-6using namespace std;int n, w;double a[200005];int main(){    while (~scanf("%d%d", &n, &w))    {        for (int i = 1; i <= 2 * n; i++)            scanf("%lf", &a[i]);        sort(a + 1, a + 1 + 2 * n);        double l = 0.0;        double r = min(a[1], (double)w / 3 * n);        while (r - l >= EPS)        {            double mid = (l + r) / 2;            if (mid * 2 < a[n + 1])                l = mid;            else if (mid * 2 > a[n + 1])                r = mid;            else            {                l = mid;                break;            }        }        printf("%lf\n", 3 * n* l);    }    return 0;}
1 0
原创粉丝点击