
【题解】
贪心。因为有平局的情况所以需要稍微思考,最普通的贪心是不可行的。我们可以构造一个这样的贪心策略:先把a,b排序,若a最弱的打得过b最弱的,那就打;否则,若a最强的打得过b最强的,那就打。否则就用a最弱的与b最强的对战,把自己的损失降到最小。
#include<cstdio>
#include<algorithm>
#define N 200010
#define rg register
using namespace std;
int n,a[N],b[N],a2[N],b2[N];
inline int read(){
int k=0,f=1; char c=getchar();
while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
return k*f;
}
int main(){
n=read();
for(rg int i=1;i<=n;i++) a[i]=b2[i]=read();
for(rg int i=1;i<=n;i++) b[i]=a2[i]=read();
sort(a+1,a+1+n); sort(b+1,b+1+n);
sort(a2+1,a2+1+n); sort(b2+1,b2+1+n);
int la=1,lb=1,ra=n,rb=n,mx=0;
while(la<=ra){
if(a[la]>b[lb]) mx+=2,la++,lb++;
else
if(a[ra]>b[rb]) mx+=2,ra--,rb--;
else if(a[la++]==b[rb--]) mx++;
}
printf("%d ",mx);
la=1,lb=1,ra=n,rb=n,mx=0;
while(la<=ra){
if(a2[la]>b2[lb]) mx+=2,la++,lb++;
else
if(a2[ra]>b2[rb]) mx+=2,ra--,rb--;
else if(a2[la++]==b2[rb--]) mx++;
}
printf("%d
",n*2-mx);
return 0;
}