【BZOJ1034】泡泡堂(贪心)
【BZOJ1034】泡泡堂(贪心)
题面
题解
很基础的贪心,然而我竟然没写对。。。身败名裂。
大概就是类似田忌赛马。
先拿看当前最大值是否能否解决对面最大值,否则检查能否用最小值来兑掉。
差不多类似把,有点点区别。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define MAX 100100
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int a[MAX],b[MAX],n;
int Solve(int *a,int *b)
{
int ret=0,l=1,r=n,L=1,R=n;
while(l<=r)
{
if(a[l]>b[L])ret+=2,++l,++L;
else if(a[r]>b[R])ret+=2,--r,--R;
else ret+=a[l]==b[R],++l,--R;
}
return ret;
}
int main()
{
n=read();
for(int i=1;i<=n;++i)a[i]=read();
for(int i=1;i<=n;++i)b[i]=read();
sort(&a[1],&a[n+1]);sort(&b[1],&b[n+1]);
printf("%d %d\n",Solve(a,b),2*n-Solve(b,a));
return 0;
}