程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1052 Tian Ji -- The Horse Racing

hdu 1052 Tian Ji -- The Horse Racing

編輯:C++入門知識

自認為沒問題的程序提交上去竟然給我WA,我的心真是“呱涼呱涼”的啊。當它AC的那一刻,百感交集……
嘿嘿,題目其實很簡單,但你必須得理清思路才行。

思路:(對我的代碼的解說)
1: 把田忌馬和齊王馬分別按速度由大到小排序
2: 找出齊王馬中  按順序第一頭 速度小於或等於田忌馬的那頭馬的編號 i  (在這裡編號從0開始)
3:   這個 i 就相當於前面田忌比輸的比賽場數,故首先初始化,田忌贏得的錢 sum =  - i * 200 ;
……(省略,關鍵講他們是怎麼比的,請結合我的代碼看這個。因為表達有限 )
4: 田忌馬的頭號馬T[ T_start ]  與齊王馬的頭號馬 K[ K_start ] (開始的時候 K_start = i)比較
→→4.1   如果 T[ T_start ] > K[ K_start ] ,則田忌比贏一場, sum  += 200, T_start ++,K_start++
→→4.2   如果 T[ T_start ] < K[ K_start ] ,則田忌比輸一場, sum  -= 200, T_start ++,K_start++
→→4.3   如果T[ T_start ] == K[ K_start ](最麻煩,也是最容易出錯的)
→→→→4.3.1如果T[ T_end ] > K[ K_end ] ,則用最後一頭田忌馬與最後一頭齊王馬比賽,田忌贏一場
 →→→→→→→sum+=200,T_end--,K_end--;
 →→→→4.3.2如果T[T_end] < K[K_end] ,則用最後一頭田忌馬與最前一頭齊王馬比賽,田忌輸一場
→→→→→→→sum-=200,T_end--,K_start++;
→→→→4.3.3如果T[T_end]==K[K_end],則用田忌馬最後一頭與齊王馬最前一頭比【還要轉個彎】
→→→→→→→4.3.3.1如果T[T_end]<K[K_start],田忌輸一局,sum-=200,T_end--,K_start++;
→→→→→→→4.3.3.2如果T[T_end]==K[K_start],比賽平局,sum不變,T_end--,K_start++;
5:判斷是否 K_start  > K_end ,如果不是,則返回 4,否則 跳出循環
6:輸出

代碼如下:
[cpp]
#include<iostream> 
#include<cstdio> 
#include<algorithm> 
using namespace std; 
int T[1001],K[1001]; 
int cmp(const int &a,const int &b) 

    return a>b?1:0; 

 
int main() 

    int n; 
    while(scanf("%d",&n)>0&&n) 
    { 
        int i; 
        for(i=0;i<n;i++)  cin>>T[i]; 
        for(i=0;i<n;i++)  cin>>K[i]; 
        sort(T,T+n,cmp);  sort(K,K+n,cmp); 
        i=0; 
        while(i<n) 
        { 
            if(T[0]>=K[i])  break; 
            i++; 
        } 
        int sum = -i*200;  
        int T_end=n-1-i,T_start=0,K_end=n-1,K_start=i;  
        while(K_start<=K_end) 
        { 
             
            if(T[T_start] < K[K_start])       { 
                sum -= 200; T_end--; K_start++; 
            } 
            else if(T[T_start]>K[K_start])     { 
                sum += 200;T_start++; K_start++;  
            } 
            else     www.2cto.com
            { 
                if(T[T_end]>K[K_end]) 
                {   sum+=200;T_end--;K_end--;   } 
                else if(T[T_end]<K[K_end]) 
                {   sum-=200;T_end--;K_start++;} 
                else 
                { 
                    if(T[T_end] < K[K_start]) 
                        sum -= 200; 
                        T_end--;K_start++; 
                } 
            } 
        } 
        printf("%d\n",sum); 
    } 
    return 0; 

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