类似于田忌赛马的策略,最小的能赢就赢,最大的也是能赢就赢,如果都不满足就用最小的去换对方最大的,然后注意判等于。
#include <cstdio>
#include <algorithm>
#define Rep(i,s,t) for(int i=s;i<=t;i++)
using namespace std;
const int maxx = 100000 + 25;
int a[maxx],b[maxx];
int n,m,la,lb,ra,rb;
int L(int *a,int *b){
int ans = 0;
la = lb = 1;ra = rb = n;
while(la<=ra){
if(a[ra]>b[rb]) ans+=2,ra--,rb--;
else if(a[la]>b[lb]) ans+=2,la++,lb++;
else ans+=(a[la]==b[rb]),la++,rb--;
}
return ans;
}
int main(){
scanf("%d",&n);
Rep( i , 1 , n ) scanf("%d",&a[i]);
Rep( i , 1 , n ) scanf("%d",&b[i]);
sort(a+1,a+n+1);sort(b+1,b+n+1);
printf("%d %d",L(a,b),2*n-L(b,a));
return 0;
}