程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [BZOJ 1034][ZJOI2008]泡泡堂BNB(類田忌賽馬貪心)

[BZOJ 1034][ZJOI2008]泡泡堂BNB(類田忌賽馬貪心)

編輯:C++入門知識

[BZOJ 1034][ZJOI2008]泡泡堂BNB(類田忌賽馬貪心)


 

不過這個題的游戲規則略有些不同,贏了得2分,平了得1分,輸了不扣分,所以貪心過程和POJ的那題略有一點不同,具體看代碼吧。

 

#include 
#include 
#include 
#include 
#include 

#define MAXN 100050

using namespace std;

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

int cal() //注意:cal函數得出的值是a方得分,得到的結果是a方分最高的情況
{
    int minpa=1,minpb=1,maxpa=n,maxpb=n,ans=0; //a的最小指針、b的最小指針、a的最大指針、b的最大指針
    while(minpa<=maxpa)
    {
        if(a[minpa]>b[minpb]) ans+=2,minpa++,minpb++; //a的最小比b最小大,用掉a和b的最小
        else if(a[maxpa]>b[maxpb]) ans+=2,maxpa--,maxpb--; //a最大比b最大大
        else ans+=(a[minpa]==b[maxpb]),minpa++,maxpb--; //否則a的最小和b最大比
    }
    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+n+1);
    sort(b+1,b+n+1);
    printf(%d ,cal());
    swap(a,b);
    printf(%d
,2*n-cal());
    return 0;
}

 

 

??

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved