hdu 1052 Tian Ji -- The Horse Racing【田忌賽馬】

題目

這道題主要是需要考慮到各種情況:先對馬的速度進行排序,然後分情況考慮:
1.當田忌最慢的馬比國王最慢的馬快則贏一局
2.當田忌最快的馬比國王最快的馬快則贏一局
3.當田忌最快的馬比國王最快的馬慢 則用田忌最慢的馬和國王最快的馬比,輸一局
4.當他們最快的馬相等時則用 田忌最慢的馬和國王最快的馬比。【因爲Tian剩下的super馬一定能戰勝king的plus馬,所以就算自己輸一場,隊友也能幫忙贏回一場,而勝一場和打平一場的收益是一樣的,而且自己輸的時候可以拉對方最快的馬下水,給自己最快的馬創造更大的勝利機會,也就是說自己最快的馬很可能因爲自己的最慢的馬的犧牲再勝利一場,從這個角度看,還是自己故意輸掉比較好。舉個列子:

Tian: 9 7 5

King:9 8 6。如果Tian的9和King的9打平手,那麼Tian會輸2場;Tian的5打King的9,Tian贏2場;

#include<iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

int main()
{
  int n;
  int Tian[1110],King[1110];
  while(cin>>n)
  {
      if(n==0) break;
      for(int i=0;i<n;i++)
        cin>>Tian[i];
      for(int i=0;i<n;i++)
          cin>>King[i];
     sort(Tian,Tian+n);
     sort(King,King+n);

     int sj=0,sk=0;
     int ej=n-1,ek=n-1;
     int ans = 0;
     for(int i=0;i<n;i++)
     {
         if(Tian[sj]>King[sk]){//Tian(min)>King(min)
            ans++;
            sj++;sk++;
         }else if(Tian[ej]>King[ek]){//Tian(max)>King(max)
            ans++;
            ej--;ek--;
         }else if(Tian[ej]<King[ek]){//Tian(max)<King(max)
            ans--;
            sj++;
            ek--;
         }else if(Tian[ej]==King[ek]){//Tian(max)=King(max)
                if(Tian[sj]<King[ek])
                    ans--;
                sj++;
                ek--;
         }
     }
     cout<<ans*200<<endl;
  }
    return 0;
}

 

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