(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♪(・ω・)ノ