牛牛和羊羊正在玩一个纸牌游戏。这个游戏一共有n张纸牌, 第i张纸牌上写着数字ai。
牛牛和羊羊轮流抽牌, 牛牛先抽, 每次抽牌他们可以从纸牌堆中任意选择一张抽出, 直到纸牌被抽完。
他们的得分等于他们抽到的纸牌数字总和。
现在假设牛牛和羊羊都采用最优策略, 请你计算出游戏结束后牛牛得分减去羊羊得分等于多少。
牛牛和羊羊正在玩一个纸牌游戏。这个游戏一共有n张纸牌, 第i张纸牌上写着数字ai。
牛牛和羊羊轮流抽牌, 牛牛先抽, 每次抽牌他们可以从纸牌堆中任意选择一张抽出, 直到纸牌被抽完。
他们的得分等于他们抽到的纸牌数字总和。
现在假设牛牛和羊羊都采用最优策略, 请你计算出游戏结束后牛牛得分减去羊羊得分等于多少。
输入包括两行。
第一行包括一个正整数n(1 <= n <= 105),表示纸牌的数量。
第二行包括n个正整数ai(1 <= ai <= 109),表示每张纸牌上的数字。
输出一个整数, 表示游戏结束后牛牛得分减去羊羊得分等于多少。
3 2 7 4
5
根据题目要求,牛牛妞妞抽取的牌其实不是随机的都是最优的就是从大到小抽牌,所以对牌进行排序一次抽取做差值# coding=utf-8while 1:num=int(raw_input())l=sorted(map(int,raw_input().split()))tar=num%2sumA=0sumB=0fori inrange(num):ifi%2==tar:sumA+=l[i]elifi%2!=tar:sumB+=l[i]printabs(sumA-sumB)break
from typing import List def score_diff(nums: List[int]) -> int: nums.sort(reverse=True) # 如果数组长度为奇数,末尾补一个0 if len(nums) % 2 != 0: nums.append(0) diff = 0 for i in range(0, len(nums), 2): diff += nums[i] - nums[i + 1] return diff def oj_main(): # 数字输入 start _ = int(input()) ints = [int(s) for s in input().split()] int_res = score_diff(ints) print(int_res) # 数字输入 end if __name__ == '__main__': oj_main()
from typing import List
def solution(a):
# 这里写题解
...
def oj_main():
# 数字输入 start ===========================
n = int(input()) # 一共有 n 个输入,或 n 行输入
ints = [int(s) for s in input().split()] # 单行输入,用不到 n
ints = [int(input()) for _ in range(n)] # 多行输入
# 上面两行只留一行
ints_res: List[int] = solution(ints)
print(' '.join([str(i) for i in ints_res])) # 单行输出数字数组
# 数字输入 end ============================
# 字符输入 start ---------------------------
n = int(input()) # # 一共有 n 个输入,或 n 行输入
words = input().split() # 单行输入,用不到 n
words = [input() for _ in range(n)] # 多行输入
# 上面两行只留一行
words_res: List[str] = solution(words)
print(' '.join(words_res)) # 单行输出字符数组
# 字符输入 end ----------------------------
if __name__ == '__main__':
oj_main()
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
int main(){
vector<long long> arr;
long long n, m;
cin>>n;
for(int i=0; i<n; i++){
cin>>m;
arr.push_back(m);
}
sort(arr.begin(), arr.end(), greater<long long>());
long long ret = 0;
for(int i = 0; i < n; i++){
//cout<<arr[i]<<" ";
if(i % 2)
ret -= arr[i];
else
ret += arr[i];
}
cout<<ret;
return 0;
} n = input() m = sorted(list(map(int, input().split()))) a = sum(m) n = sum(m[::-2]) print(2*n-a)
#include <iostream>
#include <vector>
#include <set>
using namespace std;
multiset<int>::reverse_iterator e;
int main()
{
int n,nn,yy;
multiset<int> s;
while (cin >> n)
{
nn = yy = 0;
for (int i = 0; i < n; i++)
{
int tmp; cin >> tmp;
s.insert(tmp);
}
int i = 1;
for (e = s.rbegin(); e != s.rend(); e++,++i)
(i % 2 == 1) ? nn += *e : yy += *e;
cout << nn - yy << endl;
s.clear();
}
return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, i;
long ai;
cin >> n;
vector<long> vec(n);
for (i = 0; i < n; i++) {
cin >> ai;
vec[i] = ai;
}
sort(vec.begin(), vec.end(), greater<long>());
long ret = 0;
for (i = 0; i < n; i++) {
if (i & 0x1) {
ret -= vec[i];
} else {
ret += vec[i];
}
}
cout << ret << endl;
return 0;
} #include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int>card(n, 0);
for (int i = 0; i < n; i++)
{
cin >> card[i];
}
sort(card.rbegin(), card.rend());
int res = 0;
for (int i = 0; i < n; i++)
{
if (i%2==0)
{
res += card[i];
}
else
{
res += -card[i];
}
}
cout << res;
} // golang来一波
package main
import (
"fmt"
"sort"
)
func main() {
n := 0
_, _ = fmt.Scanf("%d\n", &n)
a := make([]int, n)
for i := 0; i< n; i++ {
_, _ = fmt.Scanf("%d", &a[i])
}
sort.Ints(a)
fmt.Println(sumDiffScore(a))
}
func sumDiffScore(arr []int) int {
sum := 0
i := 0
for i = len(arr) - 1; i > 0; i = i - 2 {
sum += arr[i] - arr[i-1]
}
if i == 0 {
sum += arr[0]
}
return sum
}