首页 > 其他分享 >田忌赛马(贪心)------------看了一晚上,然后在CSDN和老师的帮助下我最终才完成____我好想一下子变成高手哇………………

田忌赛马(贪心)------------看了一晚上,然后在CSDN和老师的帮助下我最终才完成____我好想一下子变成高手哇………………

时间:2023-04-12 22:33:40浏览次数:33  
标签:------------ begin end 田忌赛马 int ++ ____ -- 田忌

题目出自杭电Tian Ji -- The Horse Racing

这个题感觉有很多坑。我这里用的是先从最坏马的角度开始。

1.首先如果田忌的最坏马比不过国王的最坏马,此时田忌的最坏马肯定要输,但是要让他输的最有价值————用它换掉国王最好的马!

2.如果田忌最坏的马能比得过国王最坏的马,此时就让田忌最坏的马赢 (能赢则赢)

3.然后最复杂的情况就是田忌的马和国王的马一样好,这个时候要从双方最厉害的马开始分类讨论。

3.1田忌最厉害的马比得过国王最厉害的马,此时让田忌最厉害的马赢,然后比双方次厉害的马,如果还是田忌赢则在比次次……

3.2田忌最厉害的马比不过国王最厉害的马,这个时候用田忌最坏的马换掉国王最厉害的马:第一行是国王的马,第二行是田忌的马(!!!!不要看错)

 

只有这样是最优的。

**3.3接下来是最让人头疼的,如果田忌最厉害的马和国王最厉害的马一样厉害,那么我们要让田忌最坏的马去换掉国王最厉害的马(因为这样的收益是最高的————仔细体会这里)

然后3.3之所以会让人头疼,就是他还可能遇到一些奇葩数据(也就是我田忌最坏的马不一定比不过国王最好的马——比如极端情况: 所有马都一样好。这是我们就既不会输钱也不会赢钱)

——————————————————————————————————————————————————————————————————————————————————

害 明显感到我的表达还是存在问题(可能我还是理解的不是很透彻)

接下来上代码:

#include<iostream>
#include<stdlib.h>
using namespace std;
#define N 10000
int a[N];
int a_begin,a_end;
int b[N];
int b_begin,b_end;
int com(const void *a,const void *b)
{
    return *(int *)a - *(int *)b;  
}
int main(){
    int n;
    int money;
    while((cin>>n,n)){
        for(int i = 0;i < n;i++){
            scanf("%d",&a[i]);          
        }
        for(int j = 0;j < n;j++){
            scanf("%d",&b[j]);           
        }
        a_begin = 0;
        a_end = n-1;
        b_begin = 0;
        b_end = n-1;
        qsort(a,n,sizeof(a[0]),com);    
        qsort(b,n,sizeof(b[0]),com);   
        money = 0;
        while(a_begin <= a_end){
            if(a[a_begin] > b[b_begin]){
              money++;
              a_begin++;
              b_begin++;

            }
            else if(a[a_begin] == b[b_begin]){
                if(a[a_end] > b[b_end]){
                    money++;
                    a_end--;
                    b_end--;
                }
                else if(a[a_end] == b[b_end]){
                    if (a[a_begin] < b[b_end]) {
                        money--;
                    }
                        a_begin++;
                        b_end--;
                }
                else{
                    money--;
                    a_begin++;
                    b_end--;
                }
            }
            else{
              money--;
              a_begin++;
              b_end--;
            }
        }
         printf("%d\n",money*200);
    }
    return 0;
}

 

 加油!!!小灰灰加油!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

标签:------------,begin,end,田忌赛马,int,++,____,--,田忌
From: https://www.cnblogs.com/fighting-huihui/p/17311582.html

相关文章

  • vue路由懒加载
    vue路由懒加载是性能优化考虑的一种策略。假如在router内需要引入一个component文件,importPrevCompfrom'./components/prev-comp'importNextCompfrom'./components/next-comp'这是常规的文件引入方式,这种方式下有用到和没有用到的文件都会被引入,增加资源加载性能消耗......
  • Visualizing MuZero Models
    发表时间:2021文章要点:这篇文章主要想看看muzero里面的model具体学到了什么表征。通过PCA降维的方式,发现最开始编码状态的h函数学到的embedding和动态转移函数g学到的embedding并不统一,存在很大差异。因为muzero里面没有相关的loss来控制他俩一样。然后作者就提出两种loss来约......
  • Linux wall命令
    Linuxwall命令用于发送信息,登录人员都能看到,是不是看到有点入侵聊天的影子Linuxwall命令会将讯息传给每一个mesg设定为yes的上线使用者。当使用终端机介面做为标准传入时,讯息结束时需加上EOF(通常用Ctrl+D)。使用权限:所有使用者。语法wall[message]实例传讯......
  • 打印出目录下所有文件名(给出 C、Bash两个版本)
    bashfunctionfl(){if[[-z"$1"]];thenfl_read_dir$PWDelif[["${1:-1}"=='/']];thenfl${1%/}elsefl_read_dir$1fi}functionfl_read_dir(){forfilein`ls-a$1`......
  • Golang一日一库之 日志库 zap
    简介在开发过程中会使用到日志库去记录错误的日志,尤其是golang中有无穷无尽的error如果不记录,当你的代码出错,就无从排错了。zap是开源的Go高性能日志库主要有以下特点:支持不同的日志级别能够打印基本信息等但不支持日志的分割但是可以使用lumberjack也是zap官方......
  • ssh的基础使用与端口转发
    基础使用基本连接SSH基本的连接命令是:sshusername@hostname这里牵扯到了两台主机执行命令、运行SSH客户端的主机,我们称为本地主机A【HostA】;接收连接请求、运行SSH服务器的主机,我们称为远程主机B【HostB】。通过密码或密钥等方式验证后,SSH连接建立,主机A可以使用命令......
  • 什么是laas-Paas-Saas,docker启动设置镜像,镜像相关命令,容器相关命令
    目录什么是laas-Paas-Saas,docker启动设置镜像,镜像相关命令,容器相关命令昨日内容回顾今日内容详细1什么是laas-PaaS-SaaS2docker启动设置镜像2.1启动与停止常用命令3镜像相关命令4容器相关命令补充什么是laas-Paas-Saas,docker启动设置镜像,镜像相关命令,容器相关命令昨日内容......
  • 哈希表理论基础——学习笔记
    常见的三种哈希结构数组set(集合)map(映射)HashSet特点:HashSet无序(没有下标),不可重复HashSet为HashMap的key部分TreeSetTreeSet无序(没下标),不可重复,但是可以排序TreeSet为TreeMap的key部分mapMap和Collection没有继承关系Map以(k......
  • 383.赎金信——学习笔记
    题目:给你两个字符串:ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回true;否则返回false。magazine中的每个字符只能在ransomNote中使用一次。示例1:输入:ransomNote="a",magazine="b"输出:false示例2:输入:ransomNote="a......
  • 242.有效的字母异位词——学习笔记
    题目:给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。示例1:输入:s="anagram",t="nagaram"输出:true示例2:输入:s="rat",t="car"输出:false提示:1<=s.length,......