PTA7-7 田忌賽馬

首先回顧一下田忌賽馬這個古老的故事: 齊使者如樑,孫臏以刑徒陰見,說齊使。齊使以爲奇,竊載與之齊。齊將田忌善而客待之。忌數與齊諸公子馳逐重射。孫子見其馬足不甚相遠,馬有上、中、下輩。於是孫子謂田忌曰:“君弟重射,臣能令君勝。”田忌信然之,與王及諸公子逐射千金。及臨質,孫子曰:“今以君之下駟與彼上駟,取君上駟與彼中駟,取君中駟與彼下駟。”既馳三輩畢,而田忌一不勝而再勝,卒得王千金。於是忌進孫子於威王。威王問兵法,遂以爲師。

現在的問題: 田忌與齊王賽馬,雙方各有n匹馬參賽(n<=100),每場比賽賭注爲200兩黃金,現已知齊王與田忌的每匹馬的速度,並且齊王肯定是按馬的速度從快到慢出場,現要你寫一個程序幫助田忌計算他最好的結果是贏多少兩黃金(輸用負數表示)。

說明: 爲了簡單起見,保證2n匹馬的速度均不相同。

輸入格式:

輸入數據的第一行爲一個正整數T, 表示測試數據的組數. 然後是T組測試數據. 每組測試數據佔3行,第一行是n,表示雙方參賽馬的數量,第2行n個正整數,表示田忌的馬的速度,第3行n個正整數,表示齊王的馬的速度.

輸出格式:

針對每組測試數據輸出一行數據,表示田忌比賽的最好結果是贏多少兩黃金。

輸入樣例:

3
3
92 83 71
95 87 74
2
21 12
25 20
2
12 11
19 20

輸出樣例:

200
0
-400

思路:用棧模擬的,直接上代碼了

 

#include<iostream>
#include<queue>
#include<cstdio>
#include<vector>
#include<set>
#include<map>
#include<string>
#include<stack>
#include<string.h>
#include<cstdlib>
#include<algorithm>
#define MAX 1010
using namespace std;
int tian[105];
int qi[105];
stack<int> st;
queue<int> que;
bool cmp(int a,int b){
    return a>b;
}

int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int n,count=0;
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",&tian[i]);
        }
        for(int i=0;i<n;i++){
            scanf("%d",&qi[i]);

        }
        sort(tian,tian+n);
        sort(qi,qi+n,cmp);
        for(int i=0;i<n;i++){
            que.push(qi[i]);
            st.push(tian[i]);
        }
        while(!que.empty()){
            if(que.front()<st.top()){
                que.pop();
                st.pop();
                count++;
            }
            else{
                que.pop();
                count--;
            }
        }
        printf("%d\n",count*200);
    }
}

 

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