BZOJ 1034: [ZJOI2008]泡泡堂BNB 贪心+排序

时间:2023-03-09 16:39:03
BZOJ 1034: [ZJOI2008]泡泡堂BNB 贪心+排序

比较神奇的贪心

有点类似于田忌赛马.

如果我方最弱强于对面最弱,则直接最弱pk最弱.

如果我方最强强于对面最强,那么直接最强间pk.

否则,试着用我方最弱 pk 对方最强,看是否能打成平手.

code:

#include <bits/stdc++.h>
#define N 100006
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int solve(int a[],int b[],int n)
{
int ans=0;
int h=1,t=n,l=1,r=n;
while(h<=t&&l<=r)
{
if(a[h]>b[l])
{
ans+=2;
++h,++l;
}
else if(a[t]>b[r])
{
ans+=2;
--t,--r;
}
else
{
ans+=(a[h]==b[r]);
++h,--r;
}
}
return ans;
}
int arr[N],brr[N];
int main()
{
// setIO("input");
int i,j,n;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d",&arr[i]);
}
for(i=1;i<=n;++i)
{
scanf("%d",&brr[i]);
}
sort(arr+1,arr+1+n);
sort(brr+1,brr+1+n);
printf("%d %d",solve(arr,brr,n),2*n-solve(brr,arr,n));
return 0;
}