hdu 1052 Tian Ji -- The Horse Racing(貪心)

小記:這題開始時沒認真思考清楚,所以不曉得怎麼動筆,感覺可以用穩定婚姻用KM算法去解決。不過那樣會稍微麻煩點。而這題一看就是貪心。


思路:這題明顯是道貪心題,目的就是在於你要思考清楚它的所有狀況,然後採取最優的決策,這樣你的結果纔是最優的,也就是正確的答案。

首先能力值都排個序。我們可以很快的知道田忌的最快和最慢的馬,齊王的也是。

這題想來要是思考過的,都會知道,貪心的關鍵在於等於的情況處理起來比較複雜,而這也是解決這道題的關鍵。

首先看田忌和齊王的能比的馬中拿兩者最快的馬來比較,會有3種情況:

1、田忌最快的馬比齊王最快的馬快,那麼就和齊王比。我們可以贏200

2、田忌最快的馬比齊王最快的馬慢,那麼我們就拿田忌最慢的馬和齊王最快的馬去比,對!是去比,要有結果,這裏可能會和齊王最快的馬一樣快,所以得比。

3、兩者最快的馬速度相同,那麼我們就去看兩者最慢的馬的比較,當然總的來算也是有三種情況的:

3.1、田忌最慢的馬比齊王最慢的馬快,那麼就和齊王比。我們贏200

3.2、田忌最慢的馬比齊王最慢的馬快,我們拿田忌最慢的馬去和齊王最快的馬去比!

3.3、兩者最慢的馬速度也相等,那麼我們照樣拿田忌最慢的馬去和齊王最快的馬去比,這麼做的原因是,我們可以爲田忌留下速度快的馬,而如果速度相等拼了,那麼就虧了

因爲齊王速度快的馬你可能無法壓制了,想通這點就好辦了。

代碼設置5個參數,記錄最快最慢的馬的id,還有一個記錄答案,即必贏的馬的數量。

最後乘以200就歐克了。


代碼:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>

using namespace std;

#define mst(a,b) memset(a,b,sizeof(a))
#define REP(a,b,c) for(int a = b; a < c; ++a)
#define eps 10e-8

const int MAX_ = 10010;
const int N = 100010;
const int INF = 0x7fffffff;

int a[MAX_], b[MAX_];

int main()
{
    int T, n, m;
    while(~scanf("%d", &n), n){
        REP(i, 0, n){
            scanf("%d", &a[i]);
        }
        REP(i, 0, n){
            scanf("%d", &b[i]);
        }
        sort(a, a+n); sort(b, b+n);

        int mxt, mxq, mit, miq, ans;
        mxt = n-1; mit = 0;
        mxq = n-1; miq = 0;
        ans = 0;
        while(mit <= mxt){
            if(a[mxt] > b[mxq]){
                ans ++;
                mxt--;
                mxq --;
            }
            else if(a[mxt] < b[mxq]){
                if(a[mit] < b[mxq]){
                    --ans;
                }
                ++mit;
                --mxq;
            }
            else if(a[mxt] == b[mxq]){
                if(a[mit] > b[miq]){
                    ++ans;
                    ++mit;
                    ++miq;
                }
                else {
                    if(a[mit] < b[mxq]){
                        --ans;
                    }
                    ++mit;
                    --mxq;
                }
            }
        }
        printf("%d\n", ans*200);
    }
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章