ABC187 D - Choose Me(思维)

题意:

在这里插入图片描述
就是有n个城市,每个城市有两个属性(Ai,Bi),
你要选择最少的城市,满足选出的城市的sum(Ai+Bi)>未被选择的城市的sum(Ai),
输出选择的最少城市数量。

数据范围:n<=2e5,Ai,Bi<=1e9

解法:

如果一个都不选,那么未被选择的城市的sum(Ai)就是所有Ai的和,

考虑选择一个城市i会产生什么影响:
选择的sum(Ai+Bi)+=Ai+Bi,
未选择的sum(Ai)-=Ai,

未选择的减相当于选择的加,
因此选择城市i造成的总影响为Ai+Bi+Ai,
对Ai+Bi+Ai排序,优先选择大的城市即可,
统计一下选择到多少个城市的时候满足条件.

code:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define PI pair<int,int>
const int maxm=2e5+5;
struct Node{
    
    
    int a,b,c;
}e[maxm];
int n;
bool cmp(Node a,Node b){
    
    
    return a.c>b.c;
}
signed main(){
    
    
    ios::sync_with_stdio(0);
    cin>>n;
    for(int i=1;i<=n;i++){
    
    
        int a,b;cin>>a>>b;
        e[i]={
    
    a,b,a+b+a};
    }
    sort(e+1,e+1+n,cmp);
    int suma=0;
    for(int i=1;i<=n;i++)suma+=e[i].a;
    int now=0;
    for(int i=1;i<=n;i++){
    
    
        now+=e[i].c;
        if(now>suma){
    
    
            cout<<i<<endl;
            return 0;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44178736/article/details/112691195