1038C. Gambling(思维+模拟)

Two players A and B have a list of n

integers each. They both want to maximize the subtraction between their score and their opponent's score.

In one turn, a player can either add to his score any element from his list (assuming his list is not empty), the element is removed from the list afterward. Or remove an element from his opponent's list (assuming his opponent's list is not empty).

Note, that in case there are equal elements in the list only one of them will be affected in the operations above. For example, if there are elements {1,2,2,3}

in a list and you decided to choose 2 for the next turn, only a single instance of 2

will be deleted (and added to the score, if necessary).

The player A starts the game and the game stops when both lists are empty. Find the difference between A's score and B's score at the end of the game, if both of the players are playing optimally.

Optimal play between two players means that both players choose the best possible strategy to achieve the best possible outcome for themselves. In this problem, it means that each player, each time makes a move, which maximizes the final difference between his score and his opponent's score, knowing that the opponent is doing the same.

Input

The first line of input contains an integer n

(1≤n≤100000

) — the sizes of the list.

The second line contains n

integers ai (1≤ai≤106

), describing the list of the player A, who starts the game.

The third line contains n

integers bi (1≤bi≤106

), describing the list of the player B.

Output

Output the difference between A's score and B's score (A−B

) if both of them are playing optimally.

Examples

Input

Copy

2
1 4
5 1

Output

Copy

0

Input

Copy

3
100 100 100
100 100 100

Output

Copy

0

Input

Copy

2
2 1
5 6

Output

Copy

-3

Note

In the first example, the game could have gone as follows:

  • A removes 5
  • from B's list.
  • B removes 4
  • from A's list.
  • A takes his 1
  • .
  • B takes his 1
  • .

Hence, A's score is 1

, B's score is 1 and difference is 0

.

There is also another optimal way of playing:

  • A removes 5
  • from B's list.
  • B removes 4
  • from A's list.
  • A removes 1
  • from B's list.
  • B removes 1
  • from A's list.

The difference in the scores is still 0

.

In the second example, irrespective of the moves the players make, they will end up with the same number of numbers added to their score, so the difference will be 0

.题意:A和B两名玩家分别有一个长度为n的数组,游戏规则是,两人有一个初始得分是0,每次可以从自己的数组里取一个数字,作为自己的得分,也可以删掉对方数组中的一个数字,两人轮流进行,先A进行,保证玩家足够聪明,求AB两人得分差值的最大值

思路:每次比较自己的最大值是否大于对方的最大值,如果大于,则取自己的最大值作为自己的分数,如果小于则将对方的最大值删掉。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N = 1e5+5;
int a[N],b[N];
int main(){
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d",&a[i]);
	for(int i=0;i<n;i++)
		scanf("%d",&b[i]);
	sort(a,a+n);
	sort(b,b+n);
	LL ans1=0,ans2=0;
	int i=n-1,j=n-1;
	for(int k=0;k<n;k++){
		if(i>=0&&a[i]>b[j]) ans1+=a[i--];
		else j--;
		if(j>=0&&b[j]>a[i]) ans2+=b[j--];
		else i--;
	}
	printf("%lld\n",ans1-ans2);
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值