1 条题解

  • 0
    @ 2026-5-2 22:21:25

    1. 题目分析

    入门题。

    S=i=1naiS=\sum_{i=1}^{n}a_i

    我们假设电影 ii 获得最佳导演奖,电影 jj 获得最佳剧本奖,那么电影 ii 的贡献为 biaib_i-a_i,电影 jj 的贡献为 cjajc_j-a_j,此时总的欢呼值为 W=S+(biai)+(cjaj)W=S+(b_i-a_i)+(c_j-a_j)。我们想令 WW 最大,就是要使 biaib_i-a_icjajc_j-a_j 最大。于是我们可以将电影按 bab-acac-a 从大到小排序。

    • iji\neq j 时,取两个最大的即可。

    • i=ji=j 时,交叉取最大。

    这样就做出来了一道入门题。

    2. 代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+5;
    typedef long long ll;
    struct node{ll num,id;}A[N],B[N];
    inline bool cmp(node a,node b){return a.num>b.num;}
    int main()
    {
    	ll n,sum=0;
    	scanf("%lld",&n);
    	for(ll i=1;i<=n;i++)
    	{
    		ll a,b,c;
    		scanf("%lld%lld%lld",&a,&b,&c);
    		A[i]={b-a,i},B[i]={c-a,i};
    		sum+=a;
    	}
    	sort(A+1,A+1+n,cmp);
    	sort(B+1,B+1+n,cmp);
    	if(A[1].id!=B[1].id)
    	{
    		printf("%lld\n",sum+A[1].num+B[1].num);
    		printf("%lld %lld\n",A[1].id,B[1].id);
    	}
    	else
    	{
    		if(A[1].num+B[2].num>A[2].num+B[1].num)
    		{
    			printf("%lld\n",sum+A[1].num+B[2].num);
    			printf("%lld %lld\n",A[1].id,B[2].id);
    		}
    		else
    		{
    			printf("%lld\n",sum+A[2].num+B[1].num);
    			printf("%lld %lld\n",A[2].id,B[1].id);
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    10339
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者