[ZJOI2008]泡泡堂

贪心。
一开始以为和田忌赛马的策略一样,码码码。。。突然发现不太对,如果就这的把最弱的卖了多亏啊。。。所以先比对一下自己家最弱的能不能干掉对手最弱的,如果不能再判一下能不能和最强的打成平局。如果不能就消耗了对面最强的即可。

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
int n,ans;
const int N=100005;
int a[N],b[N];
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);
  int la=1,lb=1,ra=n,rb=n;
  for(int i=1;i<=n;i++){
    if(a[la]>b[lb]) la++,lb++,ans+=2;
    else if(a[ra]>b[rb]) ra--,rb--,ans+=2;
    else {if(a[la]==b[rb])ans++;la++,rb--;}
  }
  printf("%d ",ans);
  ans=0;
  for(int i=1;i<=n;i++)swap(a[i],b[i]);
  la=1,lb=1,ra=n,rb=n;
  for(int i=1;i<=n;i++) {
    if(a[la]>b[lb]) la++,lb++,ans+=2;
    else if(a[ra]>b[rb]) ra--,rb--,ans+=2;
    else {if(a[la]==b[rb])ans++;la++,rb--;}
  }
  printf("%d",n*2-ans);
}
posted @ 2018-07-26 11:11  SWHsz  阅读(158)  评论(0编辑  收藏  举报