【BZOJ1034】泡泡堂(贪心)

【BZOJ1034】泡泡堂(贪心)

题面

BZOJ
洛谷

题解

很基础的贪心,然而我竟然没写对。。。身败名裂。
大概就是类似田忌赛马。
先拿看当前最大值是否能否解决对面最大值,否则检查能否用最小值来兑掉。
差不多类似把,有点点区别。

#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;
}

posted @ 2018-08-09 17:20  小蒟蒻yyb  阅读(195)  评论(0编辑  收藏  举报