bzoj 1034 贪心

  首先如果我们想取得分最高的话,肯定尽量赢,实在赢不了的话就耗掉对方最高的,那么就有了贪心策略,先排序,我方最弱的马和敌方最弱的相比,高的话赢掉,否则耗掉敌方最高的马。

  对于一场比赛,总分是一定的,所以两问实际上是等效的。

/**************************************************************

    Problem: 1034

    User: BLADEVIL

    Language: C++

    Result: Accepted

    Time:264 ms

    Memory:1588 kb

****************************************************************/

 

//By BLADEVIL

#include<cstdio>

#include<algorithm>

#define maxn (100000+10)

 

using namespace std;

 

int n,a[maxn],b[maxn];

 

int calc()

{

    int i,j,k,l,ans;

    i=j=1; k=l=n; ans=0;

    while (i<=k)

    {

        if (a[i]>b[j]) ans+=2,i++,j++;

        else if(a[k]>b[l]) ans+=2,k--,l--;

        else ans+=(a[i]==b[l]),i++,l--;

    }

    return ans;

}

 

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);

    printf("%d ",calc());

    swap(a,b);

    printf("%d\n",2*n-calc());

    return 0;

}

 

你可能感兴趣的:(ZOJ)