列表

详情


NC52149. Card

描述

今天你和你的好朋友在玩纸牌游戏,双方均有张纸牌。
你的好朋友会按次序打出这张纸牌,具体来说,TA第次打出的纸牌上写有数字
你手上的纸牌写有的数字分别为,但你还没有想好以什么样的顺序打出。
设你第次打出的牌为,则游戏结束后,你的得分为,你希望最大化你的得分
求你最大的得分

输入描述

第一行数字表示纸牌数量
接下来一行个数字,代表你的好朋友的出牌顺序
接下来一行个数字,代表你拥有的牌

输出描述

一行一个数字表示最大可能得分

示例1

输入:

5
1 7 9 5 3
10 4 2 6 8

输出:

15

说明:

一种可行的出牌顺序为{10,2,4,8,6},此时得分为{(10-1)+0+0+(8-5)+(6-3)=15}

原站题解

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

C++11(clang++ 3.9) 解法, 执行用时: 173ms, 内存消耗: 3008K, 提交时间: 2019-12-25 15:03:30

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int a[100010],b[100010];
	long long  ans=0;
	int n,i;
	cin >> n;
	for(i=0;i<n;i++)
	    cin >> a[i];
	for(i=0;i<n;i++)
	    cin >> b[i];
	sort(a,a+n);
	sort(b,b+n);
	for(i=0;i<n;i++)
	{
		ans += max(0,-a[i]+b[n-i-1]);
	}
	cout << ans << endl;
	return 0;
}

C++14(g++5.4) 解法, 执行用时: 135ms, 内存消耗: 3064K, 提交时间: 2019-12-20 22:27:14

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

pypy3(pypy3.6.1) 解法, 执行用时: 314ms, 内存消耗: 35812K, 提交时间: 2019-12-21 10:51:26

n=int(input())
a=list(map(int,input().split(' ')))
b=list(map(int,input().split(' ')))
a=sorted(a)
b=sorted(b)

ans = 0
for i in range(n):
    if b[n-1-i]-a[i]>0:
        ans += b[n-1-i]-a[i]
print(ans)

Python3(3.5.2) 解法, 执行用时: 269ms, 内存消耗: 18820K, 提交时间: 2019-12-20 19:37:01

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

上一题