排序+贪心。
贪心策略就是说,对于a[],b[]分别维护两个指针,然后最弱的能打过就打最弱的,打不过的话,最强的能打过就打最强的,还是打不过的话就拿a[]最弱的打b[]最强的。
然后这个是最好成绩。最差成绩就是把a,b反一反然后做出b的最好成绩,那么2*n-ans就是a的最差成绩。
/*************************************************************
Problem: bzoj 1034 [ZJOI2008]泡泡堂BNB
User: fengyuan
Language: C++
Result: Accepted
Time: 268 ms
Memory: 1604 kb
Submit_Time: 2017-11-16 22:26:47
*************************************************************/
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 100010;
int n, ans;
int a[N], b[N];
inline void solve()
{
int l = 1, r = n, ll = 1, rr = n; ans = 0;
while (l <= r && ll <= rr){
if (a[l] > b[ll]) ans += 2, l ++, ll ++;
else if (a[r] > b[rr]) ans += 2, r --, rr --;
else ans += (a[l] == b[rr]), l ++, rr --;
}
}
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+1+n); sort(b+1, b+1+n);
solve();
printf("%d ", ans);
swap(a, b);
solve();
printf("%d\n", 2*n-ans);
return 0;
}