三国游戏(第十四届蓝桥杯)

这篇具有很好参考价值的文章主要介绍了三国游戏(第十四届蓝桥杯)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X,Y,Z(一开始可以认为都为 0)。

游戏有 n个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i个事件发生时会分别让 X,Y,Z
增加 A i , B i , C i A_i,B_i,C_i Ai,Bi,Ci

当游戏结束时 (所有事件的发生与否已经确定),如果 X,Y,Z的其中一个大于另外两个之和,我们认为其获胜。
例如,当 X>Y+Z时,我们认为魏国获胜。
小蓝想知道游戏结束时如果有其中一个国家获胜,最多发生了多少个事件?
如果不存在任何能让某国获胜的情况,请输出 −1。

输入格式
输入的第一行包含一个整数 n。
第二行包含 n个整数表示 A i A_i Ai,相邻整数之间使用一个空格分隔。
第三行包含 n个整数表示 B i B_i Bi,相邻整数之间使用一个空格分隔。
第四行包含 n 个整数表示 C i C_i Ci,相邻整数之间使用一个空格分隔。

输出格式
输出一行包含一个整数表示答案。

数据范围
对于 40%的评测用例,n≤500;
对于 70%的评测用例,n≤5000;
对于所有评测用例, 1 ≤ n ≤ 1 0 5 , 0 ≤ A i , B i , C i ≤ 1 0 9 1≤n≤10^5,0≤A_i,B_i,C_i≤10^9 1n1050Ai,Bi,Ci109
注意,蓝桥杯官方给出的关于 A i , B i , C i A_i,B_i,C_i Ai,Bi,Ci
的数据范围是 1 ≤ A i , B i , C i ≤ 1 0 9 1≤Ai,Bi,Ci≤10^9 1Ai,Bi,Ci109,但是这与给出的输入样例相矛盾,因此予以纠正。

输入样例:

3
1 2 2
2 3 2
1 0 7

输出样例:

2

样例解释

发生两个事件时,有两种不同的情况会出现获胜方。
发生 1,2 事件时蜀国获胜。
发生 1,3 事件时吴国获胜。

代码(python版本)

n=int(input())
def check(x,y,z)->int:
    w=[]
    for i in range(n):
        w.append(x[i]-y[i]-z[i])
    w.sort(reverse=True)
    res=-1
    sum=0
    for i in range(n):
        sum+=w[i]
        if sum>0:
            res=i+1
    return res
a=list(map(int,input().split()))
b=list(map(int,input().split()))
c=list(map(int,input().split()))
print(max(check(a,b,c),check(b,a,c),check(c,a,b)))

代码(cpp版本)

代码先欠着

思路:
本题是一道贪心题。当我一开始看这个题目的时候,首先想到的就是一道dfs题,但是当我看到数据范围为 1 0 5 10^5 105的时候我直接人傻,这还怎么dfs。于是换一个思路。
首先因为这个数据范围是 1 0 5 10^5 105,那么我们需要将时间复杂度控制在 n l o g n nlogn nlogn中。
本题要求的是一个国家打赢两个国家最多能发生多少次事件,看到最多,我就感觉是一道贪心题,那么怎么贪心呢?
首先我们需要想明白怎么贪?那我们可以先假设三个国家分别是ABC,然后我们假设 A > B + C A>B+C A>B+C,那么ABC到底是哪三个国家呢?这个直接可以枚举出来,A是魏蜀吴三个其中之一,剩下的B和C就是除了A以外的两个国家。
那么我们可以写一个函数来判断 A > B + C A>B+C A>B+C最多能要多少次
那么我们可以遍历ABC三个数组,然后用一个数组W来接受一下A国和B+C国的兵力差,也就是W[i]=A[i]-B[i]-C[i]的值,那么W[i]的含义是什么呢?很明显当W[i]>0的时候说明A的兵力比B+C的要多,这个事件我们当然要选。然后进行排序,接下来就是每次都获取到当前的兵力。然后用一个sum来记录,sum代表的是什么意思呢,就是A当前比B+C多sum个兵,然后我们依次进行遍历,sum不断累加W[i],当sum累加当前的兵力之后还是大于零,说明当前的事件容许发生,这时候就该让res++了。直到sum小于0的时候就不行了。
然后我们来看这个思路,整个的时间复杂度正好是 n l o g n nlogn nlogn(sort的时间复杂度)。
最后我们只需要调用上面的函数三次即可,也就是check(魏,蜀,吴),check(蜀,魏,吴),check(吴,蜀,魏),然后三者取最大值就行。文章来源地址https://www.toymoban.com/news/detail-811796.html

到了这里,关于三国游戏(第十四届蓝桥杯)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记2023第十四届蓝桥杯感受

    弱校ACM队员,曾获CB国二,CG国优第六。(我是fw) ------------------------------------------------------------------------分割线 2023.04.09 今年再次参加CG组,估计g了,盲猜一波省二前排,出成绩后再来更新。 ------------------------------------------------------------------------分割线 先说一下今年感受,

    2023年04月10日
    浏览(85)
  • 2023第十四届蓝桥杯JavaB组

    目录 A、阶乘求和  Ⅰ、题目解读 Ⅱ、代码  B、幸运数字  Ⅰ、题目解读  Ⅱ、代码 C: 数组分割(时间限制: 1.0s 内存限制: 512.0MB)  Ⅰ、解题思路  Ⅱ、代码  D、矩形总面积(时间限制: 1.0s 内存限制: 512.0MB)  Ⅰ、题目解读 Ⅱ、代码   E、蜗牛(时间限制: 1.0s 内存限制

    2023年04月09日
    浏览(54)
  • 【第十四届蓝桥杯单片机冲刺版】

    明天就是正式比赛啦,今天可以在把各个模块练习一遍,常考的外设相关代码一定要熟练哦。 比赛时拿到资料包了,检查驱动文件,使用到的驱动文件,自己做相应的修改,确保是能够正常使用(驱动修改相关可看之前的文章)。 下面是自己将常考的外设结合一起的练习,

    2023年04月27日
    浏览(53)
  • 第十四届蓝桥杯. 接龙数列(线性DP)

    对于一个长度为 K 的整数数列:A1,A2,...,AK,我们称之为接龙数列当且仅当 A i 的首位数字恰好等于 A i−1 的末位数字 (2≤i≤K)。 例如 12,23,35,56,61,11 是接龙数列;12,23,34,56 不是接龙数列,因为 56 的首位数字不等于 34 的末位数字。 所有长度为 11 的整数数列都是接龙数

    2024年02月02日
    浏览(35)
  • 【第十四届蓝桥杯单片机组客观题1】

    以下客观题来自4T测评的模拟题,希望可以帮助到大家,加油丫 1、C 若希望将IAP15F2K61S2单片机的IO口输出电流能力较强,应将IO配置为( )模式。 IAP15F2K61S2单片机的IO口输出电流能力较强,应将IO配置为推挽输出模式。 2、A 当下列IAP15F2K61S2单片机的中断源同时发出中断请求时

    2023年04月09日
    浏览(40)
  • 第十四届蓝桥杯编程题部分代码题解

    C. 冶炼金属 最大值就是取 a / b a / b a / b 的最小值,最小值就是二分找到满足 m i d ∗ ( b i + 1 ) ≥ a i mid * (b_i + 1) ≥ a_i mi d ∗ ( b i ​ + 1 ) ≥ a i ​ 的最小值 D. 飞机降落 全排列枚举所有降落方案,然后判断即可 E. 接龙数列 状态定义: f [ i , j ] f[i, j] f [ i , j ] 为前 i i i 个数,

    2023年04月11日
    浏览(43)
  • 蓝桥杯经验贴(第十四届蓝桥杯C++B组)

    个人背景 在参加第十四届蓝桥杯前,系统学过基础算法和简单数据结构、能熟练使用C++编写程序、参加过CCPC河北省赛、力扣通过题数1300+,力扣竞赛分数 2000+。 省赛和国赛的准备阶段 在https://www.dotcpp.com/、https://dasai.lanqiao.cn/、https://www.luogu.com.cn/上练习往年真题,也会在力扣

    2024年02月10日
    浏览(34)
  • 2023蓝桥杯C++A组题解(第十四届)

    今年广东省三中游,按New Oj估分,前5题估分17(第1题√,3,4,5题暴力) 第2题(B)dfs写错了,第7题(G)并查集,多了个以前没见过的要求,找不到思路 面向 爆零选手 水平有限,将就着看,有空再补充后5题 目录 🤯吐槽 😟A,2067: [蓝桥杯2023初赛] 幸运数 😟B,2068: [蓝桥

    2023年04月15日
    浏览(45)
  • 第十四届蓝桥杯b组c/c++

        要求使得数列变成接龙数列的最少删除个数, 相当于求该数列的最长接龙子数列的长度, 用总长度减去最长接龙长度即为最少删除个数。 定义dp[i][j]为前i个数中, 以数字j结尾的最长接龙数列的长度。 设第i个数的首位数字是a, 末位数字是b。 则dp[i]中相对于dp[i−1] 可

    2024年02月04日
    浏览(33)
  • 蓝桥杯嵌入式第十四届省赛题目解析

    前几天刚刚参加完第十四届的省赛,这届题目比我想象中的要难,其实想一想这也是应该的,以前的知识点都被摸透了,也是需要加入新的知识点了,但是我还是想说能不能别在我参加的时候加大题目难度啊。 不过听说隔壁单片机的省赛都比往年的国赛还难,这就有点离谱了

    2024年02月06日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包