题解 AT3919 【[ABC088B] Card Game for Two】

(Solution:)

这道题不难看出是一道很水的贪心题。因为每个人都会选择当前的最优策略,所以就把给出的牌按照从大至小的顺序排序,然后用两个变量分别记录两个玩家的总得分最后相减就可以了。

划重点: x&1=x%2

(code:)

#include<bits/stdc++.h>//万能头文件
using namespace std;//标准数据库
inline int read()//快速读入
{
    int x=0,f=1;char c=getchar();
    while(c<'0' || c>'9'){if(c=='-') f=0;c=getchar();}
    while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
    return f?x:-x;
}
int n,a[110],s1,s2;
int main()
{
    n=read();//读入牌的总数
    for(int i=1;i<=n;i++) a[i]=read();//读入每张牌的值
    sort(a+1,a+n+1,greater<int>());//从小至大排序(STL真香
    for(int i=1;i<=n;i++)//从最大的牌的值循环到最小的牌的值
    {
        if(i&1) s1+=a[i];
        //如果当前排序后的牌的序号不是2的倍数,那么就加给 1 号选手(因为是从 1 号一直到 n 号
        else s2+=a[i];//反之加给 2 号选手
    }
    printf("%d",s1-s2);//输出两选手得分差值
    return 0;
}

如果这篇文章给予了你帮助,那你就点个赞再走吧,Thanks♪(・ω・)ノ

原文地址:https://www.cnblogs.com/ForeverOIer/p/12660265.html