本来一看题上的图片以为是一道大模拟,谁知和泡泡堂一点关系没有
加了平局的田忌赛马问题。
如果能赢,就用最弱的打最弱的,最强的打最强的,如果都赢不了,就让最弱的去打最强的,能怎么样就怎么样。可以证明这样贪心是对的
1、用最弱的去赢最弱的显然没有问题
2、用最强的去赢最强的也很好,否则这些也干不了别的
3、用最弱的去打最强的,在最强的打最强的之后,留下的是尽量弱的,也就最大化了平局的可能,而且,使己方保留尽量强的选手,对方保留尽量弱的选手。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>#define md
#define ll long long
#define inf (int) 1e9
#define eps 1e-8
#define N 100010
using namespace std;
int a[N],b[N];
int n;
int solve(int a[],int b[])
{
int ans=0;
int l1=1,r1=n,l2=1,r2=n;
while (l1<=r1&&l2<=r2)
{
if (a[l1]>b[l2]) { ans+=2; l1++; l2++;}
else if (a[r1]>b[r2]) { ans+=2; r1--; r2--;}
else { ans+=a[l1]==b[r2]; l1++; r2--;}
}
return ans;
}int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
for (int i=1;i<=n;i++) scanf("%d",&b[i]);
sort(a+1,a+n+1); sort(b+1,b+n+1);
int ans1=solve(a,b),ans2=solve(b,a);
printf("%d %d\n",ans1,2*n-ans2);
return 0;
}