hdu1052――Tian Ji -- The Horse Racing(二)

2015-01-27 06:03:30 · 作者: · 浏览: 18
马时,无法盈利,但是此时田忌最快的马面对国王最慢的马时,至少不会吃亏,所以2种策略对比,后者更可取,因为除上述情况外, 田忌还是可能获利的)

C. 如果田忌最慢的马的速度大于国王最慢的马,那么就应该用田忌最慢的马去和国王最慢的马比(这里至少可以获利,去除所有C的情况,我们把情况转化为A,B,即使采取A,B策略亏本了(面对国王最快的马然后输掉比赛),C策略下的盈利还是大于等于亏本的)


#include 
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               using namespace std; const int N = 1010; int tianji[N], king[N]; int main() { int n; while (~scanf("%d", &n), n) { for (int i = 0; i < n; ++i) { scanf("%d", &tianji[i]); } for (int i = 0; i < n; ++i) { scanf("%d", &king[i]); } sort(tianji, tianji + n); sort(king, king + n); int king_max = n - 1, tianji_min = 0, king_min = 0; int ans = 0, i = n - 1; while (i >= tianji_min && king_max >= king_min) { if (tianji[i] > king[king_max]) { ans += 200; king_max--; i--; } else if (tianji[i] < king[king_max]) { king_max--; tianji_min++; ans -= 200; } else { if (tianji[tianji_min] < king[king_min]) { king_max--; tianji_min++; ans -= 200; } else { for (int j = tianji_min; j < n; ++j) { if (tianji[j] > king[king_min]) { ans += 200; king_min++; } else { tianji_min = j; if (tianji[tianji_min] < king[king_max]) { ans -= 200; } king_max--; tianji_min++; break; } } } } } printf("%d\n", ans); } return 0; }