题解 | #1012.a-b Problem# 2023杭电暑期多校4

1012.a-b Problem

贪心

题目大意

给定一堆 n n n 个石子,每个石子有非负值 a i , b i a_i,b_i ai,bi ,分别代表Alice和Bob取该石子可以得到的分数
两人都希望自己的得分最大化,Alice执先,求最终Alice和Bob的分数差

解题思路

取某石子的价值不仅在于自身得分,也在于让对手失去他那部分的分值
因此根据每颗石子的分数加和排序,从大到小依次取即可

参考代码

void solve()
{
    ll n;
    cin >> n;
    vector<pair<ll,pll>> v;
    pair<ll,pll> t;
    FORLL(i,1,n){
        cin >> t.second.first >> t.second.second;
        t.first=t.second.first+t.second.second;
        v.emplace_back(t);
    }
    SORT(v);
    ll A,B;A=B=0;
    for(ll i=n-1;i>=0;i--){
        if((n-1-i)&1) B+=v[i].second.second;
        else A+=v[i].second.first;
    }
    ll re=A-B;
    cout << re << endl;
}

你可能感兴趣的:(2023杭电多校,c++)