列表

详情


NC201628. 纸牌游戏

描述

今天你与你的挚友玩一种纸牌游戏,每一回合两人各出一张牌,如果你的牌点数大小比对方小,则你不得分,否则你的得分为两张卡牌点数差值的绝对值。

由于你有读心术,你已经知道了对方接下来要出的n张牌,a1 a2 a3 ... an。

你手上也有n张牌 b1 b2 b3 ... bn,问你如何安排这n张牌使你得的分数最大?

输入描述

第一行一个数字n,代表n张牌。(1<=n<=2e5)
第二行n个数字a1 a2 a3 ... an,代表你的挚友的出牌的点数大小。(1<=ai<=1e18)
第二行n个数字b1 b2 b3 ... bn,代表你的牌的点数大小。(1<=bi<=1e18)

输出描述

输出你得的最大分数。

示例1

输入:

1
1
2

输出:

1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 54ms, 内存消耗: 1964K, 提交时间: 2021-12-17 11:50:34

#include<bits/stdc++.h>
using namespace std;
long long n,a[200005],b[200005],l,m;
int main(){
	cin>>n;
	for(int i=0;i<n;i++) cin>>a[i];
	for(int i=0;i<n;i++) cin>>b[i];
	sort(a,a+n);
	sort(b,b+n);
	for(int i=0,k=n-1;i<n && k>-1;i++,k--){
		if(a[k]<b[i]) m+=b[i]-a[k];
	}
	cout<<m;
	return 0;
}

pypy3 解法, 执行用时: 234ms, 内存消耗: 36980K, 提交时间: 2022-04-11 12:14:46

n = int(input())
a = sorted(list(map(int,input().split())))
b = sorted(list(map(int,input().split())),reverse = True)
ans = 0
for _ in range(n):
    if b[_]>a[_]:
        ans += b[_]-a[_]
    else:
        break
print(ans)

Python3 解法, 执行用时: 163ms, 内存消耗: 20136K, 提交时间: 2022-01-23 12:50:47

n=int(input())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
a.sort()
b.sort()
sumn=0
for i in range(n):
    sumn+=max(0,b[n-i-1]-a[i])
print(sumn)

上一题