• 【解题报告】洛谷P4653 [CEOI2017]Sure Bet


    【解题报告】洛谷P4653 [CEOI2017]Sure Bet

    题目链接

    https://www.luogu.com.cn/problem/P4653

    思路

    我们首先观察样例,发现,我们选的都是各组权值比较大的灯泡

    所以,我们有一个思想,就是贪心,我们将两个序列从大到小排序

    然后,我们对于每个序列设置一个指针,表示某个序列选到哪里了

    然后我们根据实际情况进行移动

    如果第一个序列产生的收益大于第二个的收益了,这个时候再取第一个序列已经没用了,因为我们最小值这个时候是不变的,我们就要让第二个序列向后拓展一个,增大第二个的收益

    反之亦是如此

    当然,我们要设置一个访问数组记录是否某个权值已经被加过了

    PS:双指针好难懂啊qaq

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    using namespace std;
    const int maxn=100005;
    const int maxm=1005;
    int n;
    double a[maxn],b[maxn],ans=0.0;
    double vis1[maxn],vis2[maxn];
    bool cmp(double x,double y)
    {
    	return x>y;
    }
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	cin>>a[i]>>b[i];
    	sort(a+1,a+1+n,cmp);
    	sort(b+1,b+1+n,cmp);
    	memset(vis1,true,sizeof(vis1));
    	memset(vis2,true,sizeof(vis2));
    	double ans1=0,ans2=0;
    	for(int i=1,j=1;i<=n&&j<=n; )
    	{
    		if(vis1[i])
    		ans1+=a[i];
    		if(vis2[j])
    		ans2+=b[j];
    		vis1[i]=vis2[j]=false;
    		ans=max(ans,min(ans1-i-j,ans2-i-j));
    		if(ans1>=ans2) j++;
    		else i++;
    	}
    	printf("%.4lf
    ",ans);
    	return 0;
    }
    
    本博文为wweiyi原创,若想转载请联系作者,qq:2844938982
  • 相关阅读:
    addEventListener-第三个参数 useCapture
    介绍(javascript调试)
    Linux_PXE服务器_RHEL7
    Linux_PXE服务器_RHEL7
    Linux_OpenSSH远程连接
    Linux_OpenSSH远程连接
    Python基本语法_强制数据类型转换
    Python基本语法_强制数据类型转换
    Linux_NetworkManager_RHEL7
    Linux_NetworkManager_RHEL7
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/15398772.html
Copyright © 2020-2023  润新知