首页 > 编程语言 >第十四届蓝桥杯大赛软件赛省赛Python 《三国游戏》

第十四届蓝桥杯大赛软件赛省赛Python 《三国游戏》

时间:2024-03-21 19:22:53浏览次数:28  
标签:赛省赛 max 发生 蓝桥 Python int 事件 input 获胜

问题描述


问题类型

排序,贪心算法。

问题分析

当第i个事件发生时会分别让X,Y,Z增加Ai,Bi,Ci

即当某个事件发生时,三国各增加士兵数Ai,Bi,Ci。

如果X,Y,Z的其中一个大于另外两个之和,我们认为其获胜。

即当n个事件都确定了是否会发生后,存在X,Y,Z中任一大于另外两个之和,则有其中一个国家获胜。由于n个事件都有发生与不发生两种情况,所以最终的结果有2^n种情况,如果所有的情况都不能决出胜负,则输出-1;否则,在所有能够决出胜负的情况中选择事件发生数最多的。

由输入和输出格式知,输入第二行至第四行表示按照顺序每一次事件若发生(可能不发生)则增加的国家士兵数量,所以输入的第二至四行每一列表示各国在某一次事件发生时增加的士兵数量。

问题简化

由于各事件独立,不需要考虑事件发生的顺序,只需考虑事件最终发生与否。

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 。在这个问题中,所要求的「最好选择」就是找出事件发生数最多的,如何才能让事件数达到最多呢?

假设X国获胜,那么在每一次事件发生时,我们总是选择X国与Y国和Z国士兵增加数量之差尽量大,即A[i] - (B[i] + C[i])尽量大,当事件数增加到X - (Y + Z) > 0(保证X国能获胜)时,事件数达到最大。对于另外两个国家同理。最终找出三国最终获胜的所有情况中事件发生数能够达到最大的即可。
如果在所有情况都无法满足某一国能够获胜,即所有事件不论最终发生与否,都无法决出胜负,则输出-1。

代码实现

n = int(input())
X = list(map(int, input().split()))
Y = list(map(int, input().split()))
Z = list(map(int, input().split()))


def maxEventsnum(X, Y, Z, count=n):
    max = []
    temp = 0#士兵数之差
    j = 0
    for i in range(0, n):
        max.append(X[i] - Y[i] - Z[i])
    max = sorted(max)#对max进行排序,从大到小依次添加,直至最后一个temp仍大于零
    while count:
        count -= 1
        if temp + max[count] <= 0:
            if count == n - 1:
                j = -1
                break
            else:
                break
        else:
            j += 1
            temp += max[count]
    return j


ans = max([maxEventsnum(X, Y, Z), maxEventsnum(Y, X, Z), maxEventsnum(Z, X, Y)])
print(ans)

标签:赛省赛,max,发生,蓝桥,Python,int,事件,input,获胜
From: https://www.cnblogs.com/nhwite/p/18088087

相关文章

  • python scrapy 爬虫爬取quotes.toscrape.com
    1、安装scrapy pip包的管理工具pipinstallscrapy(在cmd中下载)win+r键输入cmd进入命令行2.scrapy介绍它是由五部分组成 引擎 下载器 spider 中间件 管道你只需要知道spider即可因为所有代码都在这里面管道是处理数据的框架定义好接口调用就可以了3.xpa......
  • Python利用Numpy和Pandas实现数据清洗
    利用Numpy和Pandas对数据进行清洗,包括去除重复记录、处理缺失值和异常值,实现代码如下:点击此处下载数据集#coding=utf-8#导入必要的库importpandasaspdimportnumpyasnp#导入数据及输出格式defread_data(filename):data=pd.read_csv(filename)......
  • 《Python从入门到实践》第九章 类
    面向对象编程是最有效的软件编写方法之一在面向对象编程时,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。根据类来创建对象称为实例化,这让你能够使用类的实例创建和使用类创建Dog类classDog:"""一次模拟小狗的简单尝试"""def__init__(self,......
  • python代码小题(4)
    #输出等腰三角形i=1whilei<=5:print(""*(5-i),end="")j=1whilej<=2*i-1:print("*",end="")j+=1print("")i+=1#for循环输出9*9乘法表forjinrange(1,10):......
  • Python的特点是什么?
    一、Python的特点是什么?Python是一种广泛使用的编程语言,具有许多引人注目的特点,以下是Python的主要特点:简单易学:Python的语法清晰明了,易于学习,这使得初学者能够快速上手。此外,Python的代码可读性强,易于编写和理解。面向对象:Python支持面向对象的编程范式,这使得开发者能够创建......
  • requests.post传的data如果是直接使用python dict封装,有些服务端接收不了这种数据类型
    平时在自己的php项目里,使用dict方式组装data,然后requests.post,一点问题都没有。但是调了后端一个java的微服务接口,结果就一直报错422: 最后问了一下开发,得到提示“python好像还有个毛病,python的json对象转字符串的时候,转出来的字符串不是标准json字符串,还要做个字符串处理,变成......
  • Python爬虫-数据采集和处理
    文章目录数据数据类型数据分析过程数据采集数据采集源数据采集方法数据清洗清洗数据数据集成数据转换数据脱敏数据《春秋左传集解》云:“事大大其绳,事小小其绳。”体现了早期人类将事情的“大小”这一性质抽象到“绳结大小”这一符号上从而产生数据的过程。数据......
  • Python安全脚本之自动化子域名收集
    声明:本工具仅用于日常学习使用,禁止用于非法域名收集,否则后果由使用者承担!!!在信息收集中少不了一些脚本的辅助,本文将讲解如何编写一个自动化子域名收集脚本代码及注释如下:fromconcurrent.futuresimport*importrequestsbanner='''_________......
  • 解决[TSP旅行商]问题,请列出[4]个可以用[Python]编程的优化路径算法,展开写出这[4]个算
    TSP(旅行商问题)是一个经典的组合优化问题,其目标是找到访问所有城市并返回起点的最短可能路线。在Python中,有多种算法可以用来解决TSP问题,以下是四个常用的算法及其编程难度级别、时间复杂度和所需的库:回溯法(Backtracking)编程难度级别:中等时间复杂度:指数级,因为需要遍历所有......
  • python操作kafka
    目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细节2.1生产者demo2.2消费者demo2.3消费者(消费群组)2.4消费者(读取目前最早可读的消息)2.5消费者(手动设置偏移量)2.6消费者(订阅多个主题)......