zoukankan      html  css  js  c++  java
  • LA 3266 Tian Ji -- The Horse Racing 田忌赛马 【贪心】

    题目链接:

      http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33702


    贪心:

      1,如果田忌的最快马快于齐王的最快马,则两者比。
      (因为若是田忌的别的马很可能就赢不了了,所以两者比)
      2,如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的最快马比。
      (由于所有的马都赢不了齐王的最快马,所以用损失最小的,拿最慢的和他比)
      3,若相等,则比较田忌的最慢马和齐王的最慢马
        3.1,若田忌最慢马快于齐王最慢马,两者比。
        (田忌的最慢马既然能赢一个就赢呗,而且齐王的最慢马肯定也得有个和他比,所以选最小的比他快得。)
        3.2,其他,则拿田忌的最慢马和齐王的最快马比。
        (反正所有的马都比田忌的最慢马快了,所以这匹马必输,选贡献最大的,干掉齐王的最快马)


    贪心策略2:

      一、如果a的最慢速度大于b的最慢,则直接a的最慢与b的最慢比赛,赢一场;
      二、如果a的最慢速度小于b的最慢,则用a的最慢浪费b的最快,输一场;
      三、如果a的最慢速度等于b的最慢,则:
        1.如果a的最快速度大于b的最快,则直接a的最快与b的最快进行比赛,赢一场;
        2.如果a的最快速度小于b的最快,则用a的最慢浪费b的最快,输一场;
        3.如果a的最快速度等于b的最快,即a与b的最慢与最快分别相等,则:
          a.如果a的最慢速度小于b的最快,则用a的最慢浪费b的最快,输一场;
          b.如果a的最慢速度等于b的最快,即a的最慢、a的最快、b的最慢、b的最快相等,说明剩余未比赛的马速度全部相等,直接结束比赛。


     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 const int maxn = 1005;
     5 int tian[maxn], king[maxn], n;
     6 
     7 int main(){
     8     while(~scanf("%d", &n)){
     9         if(!n) break;
    10         for(int i = 0; i < n; ++i) scanf("%d", &tian[i]);
    11         for(int i = 0; i < n; ++i) scanf("%d", &king[i]);
    12         sort(tian, tian + n);
    13         sort(king, king + n);
    14         
    15         int thead = 0, khead = 0;
    16         int ttail = n-1, ktail = n-1;
    17         int win = 0;
    18 
    19         while(n--){
    20             if(tian[ttail] > king[ktail]){ //如果田忌的最快马快于齐王的最快马,则两者比。
    21                 ttail--;
    22                 ktail--;
    23                 win++;
    24             }
    25             else if(tian[ttail] < king[ktail]){ //如果田忌的最快马慢于齐王的最快马,则用田忌的最慢马和齐王的最快马比。
    26                 thead++;
    27                 ktail--;
    28                 win--;
    29             }
    30             else{ //若相等,则比较田忌的最慢马和齐王的最慢马
    31                 if(tian[thead] > king[khead]){ //若田忌最慢马快于齐王最慢马,两者比。
    32                     thead++;
    33                     khead++;
    34                     win++;
    35                 }
    36                 else{ //其他,则拿田忌的最慢马和齐王的最快马比。
    37                     if(tian[thead] < king[ktail]) win--;
    38                     thead++;
    39                     ktail--;
    40                 }
    41             }
    42         }
    43         
    44         printf("%d
    ", win*200);
    45     }
    46     
    47     return 0;
    48 }

    贪心策略2代码:

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<string.h>
     5 using namespace std;
     6 const int MAXN=1010;
     7 int a[MAXN],b[MAXN];
     8 int main(){
     9     int n;
    10     while(scanf("%d",&n)==1&&n){
    11         for(int i=0;i<n;i++)scanf("%d",&a[i]);
    12         for(int i=0;i<n;i++)scanf("%d",&b[i]);
    13         sort(a,a+n);
    14         sort(b,b+n);
    15         int al=0,ah=n-1;
    16         int bl=0,bh=n-1;
    17         int ans=0;
    18         while(al<=ah&&bl<=bh){
    19             if(a[al]>b[bl]){
    20                 ans+=200;
    21                 al++;bl++;
    22             }
    23             else if(a[al]<b[bl]){
    24                 ans-=200;
    25                 al++;bh--;
    26             }
    27             else{
    28                 if(a[ah]>b[bh]){
    29                     ans+=200;
    30                     ah--;bh--;
    31                 }
    32                 else if(a[ah]<b[bh]){
    33                     ans-=200;
    34                     al++;bh--;
    35                 }
    36                 else{
    37                     if(a[al]<b[bh]){
    38                         ans-=200;
    39                         al++;bh--;
    40                     }
    41                     else if(a[al]==b[bh]){//所有的都一样了
    42                         break;
    43                     }
    44                 }
    45             }
    46         }
    47         printf("%d
    ", ans);
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    bs4解析错误之 bs4 FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml.
    UI自动化之selenium元素定位不到问题的原因有哪几种?
    selenium定位:出现Message: element not interactable 元素不可交互的问题解决方案
    JS--编码规范
    JS操作数组-2
    JS-数组操作3
    JS操作数组
    用JS解决url地址中参数乱码的问题
    数组去重--ES5和ES6
    选择排序
  • 原文地址:https://www.cnblogs.com/miaowTracy/p/4854059.html
Copyright © 2011-2022 走看看