zoukankan      html  css  js  c++  java
  • HDU 1052

                                                      Tian Ji -- The Horse Racing  HDU 1052

    顿时吓尿了:

    结题思路:

    1.若田忌最慢的马可以战胜齐王最慢的马,那么就让它战胜那匹慢马,胜利场次加1。(田忌最慢马 > 齐王最慢马)

    2.若田忌最慢的马不能战胜齐王最慢的马,那么它更加不能战胜其他的马,那就让它输,而且输给齐王最快马,失败场次加1。(田忌最慢马 < 齐王最快马)

    3.若田忌最慢的马与齐王最慢的马速度相等。此时,不能简单地认为与它打成平手就是最好情况,相反,打平是下下策,为什么呢?

    因为自己后面的队友很有可能战胜此时对方的这匹慢马,所以就算自己输一场,队友也能帮忙赢回一场,而胜一场,输一场的收益和打平一场的收益是一样的,而且自己输的时候可以拉对方最快的马下水,给己方最快的马创造更大的胜利机会(因为它失去了一个强劲的对手),也就是说己方最快的马很可能因为自己的牺牲再胜利一场,从这个角度看,还是自己故意输掉比较好。

    但是,还有一点需要注意,当自己放水前,如果己方最快的马原本就比对方最快的马快,然后还输给对方最快的马,那么己方最快的马的才华就浪费了,为什么?

    很简单,它原本就能赢,需要你放水么?- -!换句话说,这种情况下,自己的牺牲没有一点价值。

    所以,在放水时,一定要保证己方最快马不快于对方最快马。满足此条件后,让己方最慢马与对方最快马去比赛(有可能平局),这样,田忌的马就得到了充分的利用。

    转载于:http://blog.csdn.net/dgq8211/article/details/7370765

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<string.h>
     4 #include<stdio.h>
     5 using namespace std;
     6 int a[1005],b[1005];
     7 int main()
     8 {
     9     int i,n,j,d,win,lose,t_low,t_fast,k_low,k_fast;
    10     while(scanf("%d",&n)!=EOF)
    11     {
    12         if(n==0)
    13             break;
    14         for(i=1;i<=n;i++)
    15             scanf("%d",&a[i]);
    16         for(i=1;i<=n;i++)
    17             scanf("%d",&b[i]);
    18         sort(a+1,a+n+1);
    19         sort(b+1,b+1+n);
    20         win=0;lose=0;t_low=1;t_fast=n;k_low=1;k_fast=n;
    21         while(t_low<=t_fast)
    22         {
    23             if(a[t_low]>b[k_low])
    24             {
    25                 win++;
    26                 t_low++;
    27                 k_low++;
    28             }
    29             else if(a[t_low]<b[k_low])
    30             {
    31                 lose++;
    32                 t_low++;
    33                 k_fast--;
    34             }
    35             else
    36             {
    37                 if(a[t_fast]>b[k_fast])
    38                 {
    39                     win++;
    40                     t_fast--;
    41                     k_fast--;
    42                 }
    43                 else
    44                 {
    45                     if(a[t_low]<b[k_fast])
    46                             lose++;
    47                     k_fast--;
    48                     t_low++;
    49                 }//这里多多注意
    50             }
    51         }
    52         printf("%d
    ",200*(win-lose));
    53 
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    369. Plus One Linked List
    147. Insertion Sort List
    817. Linked List Components
    61. Rotate List
    Object 类
    多态
    重写方法
    Protected 修饰符
    继承
    数组
  • 原文地址:https://www.cnblogs.com/tt123/p/3243152.html
Copyright © 2011-2022 走看看