• Tian Ji -- The Horse Racing


    题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=16442
    题意:

            田忌赛马问题。多组案例,以输入n值为0时结束。田忌与国王各有n匹马,进行n场比赛,规定每匹马只能上场一次,每场比赛获胜则获得200金币,否则扣除200金币。给定双方马速,求田忌最多获取多少金币。
    案例:

           Sample Input
           3

           92 83 71

           95 87 74

           2

           20 20

           20 20

           2

           20 19

           22 18

           0

           Sample Output

           200

           0

           0
    分析:

          贪心策略。

          将双方最慢马匹进行竞赛,

          若田忌一方马速快则获取200金币,

          若田忌一方马速慢于国王最慢的马,则用田忌最慢的马消耗国王最快的马以获取其它马匹胜利的机会

          若双方马速相等,则又需分情况讨论:先判断双方最快的马匹之间的赛果,若田忌胜则获取200金币,否则用田忌最慢马匹消耗国王最快马匹。注意!田忌最慢马匹不一定输给国王最快马匹,也可能平局。

    源代码:

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 using namespace std;
     5 int n,ant,i,j;
     6 int a[1005],b[1005];
     7 void cmp()
     8 {
     9 
    10     int x1=0,x2=n-1,y1=0,y2=n-1;
    11     while(x1<=x2)
    12     {
    13         if(a[x1]>b[y1])//双方最慢的马进行比较,田忌胜
    14         {
    15             ant+=200;
    16             x1++;
    17             y1++;
    18         }
    19         else if(a[x1]<b[y1])//田忌输,用最慢的马与国王最快的马竞赛
    20         {
    21             ant-=200;
    22             x1++;
    23             y2--;
    24         }
    25         else//马速相等
    26         {
    27             if(a[x2]>b[y2])//双方最快的马进行竞赛,田忌胜
    28             {
    29                 ant+=200;
    30                 x2--;
    31                 y2--;
    32             }
    33             else
    34             {
    35                 if(a[x1]<b[y2])//用田最慢的马输给国王最快的马
    36                    ant-=200;
    37                 x1++;
    38                 y2--;
    39             }
    40         }
    41     }
    42 }
    43 int main()
    44 {
    45     while(scanf("%d",&n)&&n)
    46     {
    47         for(i=0;i<n;i++)
    48             scanf("%d",&a[i]);//田忌方马速
    49         for(i=0;i<n;i++)
    50             scanf("%d",&b[i]);//国王方马速
    51         sort(a,a+n);//排序
    52         sort(b,b+n);
    53         ant=0;//马赛前田忌拥有金币
    54         cmp();
    55         printf("%d
    ",ant);
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    PetShop数据访问层之消息处理 《解剖PetShop》系列之三
    正则过滤汉字
    c语言 断点续传3
    c 写cgi 与socket通信
    C 语言 断点续传2
    承接B2C商城定制开发 空间+域名+风语商城系统=¥4000
    16进制 SQL注入
    c# socket传送大文件
    c写cgi cookies 设置与读取
    cgi 操作封装
  • 原文地址:https://www.cnblogs.com/huaszjh/p/4716362.html
Copyright © 2020-2023  润新知