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)