zoukankan      html  css  js  c++  java
  • poj hdu Tian Ji The Horse Racing 贪心

    田忌赛马
    先把田忌和国王的马排序。
    每次取田忌的最快的马与国王最快的马比较,有三种情况。
    一,田忌最快的马比国王最快的快,那么直接拿田忌最快的马去赢国王最快的马。
    二,田忌最快的马比国王最快的慢,那么拿田忌最慢的马去输国王最快的马。
    三,田忌最快的马与国王最快的马速度一样。这时就比较麻烦一点了。
          先拿田忌最慢的马与国王最慢的马比较。
          若比国王快,直接去赢掉国王最慢的马。
          否则田忌最慢的马再去与国王最快的马比较,此时这两只马必定是要比赛的,只是比较一下速度而以。
     
    给一些测试数据:
    输入:
    2
    4 6
    3 6
    2
    4 6
    5 6
    2
    0 3
    0 4
    2
    0 3
    0 2
    3
    6 7 8
    6 6 7
    3
    1 3 3
    2 2 3
    3
    1 3 5
    2 2 5
    3
    7 8 8
    6 8 9
    3
    4 5 5
    5 5 5
    4
    5 6 7 8
    2 4 6 7
    输出:
    200
    0
    0
    200
    400
    200
    200
    0
    -200
    800
     
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    int main()
    {
           int a[1005],b[1005],n,i,a_H,a_L,b_H,b_L,sum;
           while(scanf("%d",&n),n!=0)
           {
                   for(i=0;i<n;i++)
                   scanf("%d",&a[i]);
                   for(i=0;i<n;i++)
                   scanf("%d",&b[i]);
                   sort(a,a+n);
                   sort(b,b+n);
                   sum=0;
                   a_H=0;a_L=n-1;
                   b_H=0;b_L=n-1;
                   while(b_H<=b_L)
                   {
                        if(a[a_L]>b[b_L])
                        {
                             sum+=200;
                             a_L--;b_L--;
                        }
                        else if(a[a_L]<b[b_L])
                        {
                             sum-=200;
                             a_H++;b_L--;
                        }
                        else
                        {
                            while(a_H<=a_L)
                            {
                                 if(a[a_H]>b[b_H])
                                 {
                                      a_H++;
                                      b_H++;
                                      sum+=200;
                                 }
                                 else
                                 {
                                       if(a[a_H]<b[b_L])
                                       sum-=200;
                                       b_L--;
                                       a_H++;
                                       break;
                                 }
                            }
                        }
                   }
                                       
                   printf("%d\n",sum);  
           }
           return(0);  
    }
  • 相关阅读:
    如何强制360浏览器以极速模式打开页面
    如何解决Android SDK无法下载Package的问题(.net)
    Xamarin 安装步骤
    使用require.js和backbone实现简单单页应用实践
    HBuilder之初体验
    ClassLoader&双亲委派&类初始化过程
    List remove ConcurrentModificationException源码分析
    二十九、简谈设计模式
    二十八、Java基础--------正则表达式
    二十七、JDK1.5新特性---Annotation
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740230.html
Copyright © 2011-2022 走看看