蓝桥杯A组——Python(10.09)Day11
前言:重这篇之后输入格式不写在input里面了,改为写一个print格式
W3T5-三国游戏:
小蓝正在玩一款游戏,游戏中魏(X)、蜀(Y)、吴(Z)三个国家各自拥有一定数量的士兵X、Y、Z(一开始可以认为都是0)。
游戏有n个可能会发送的事件,每个事件之间相互独立且最多只发送一次,当第i个事件发送时会分别让X、Y、Z增加(Ai)(Bi)(Ci).
当游戏结束时(所以事件的发生与否已经确定),如果X,Y,Z的其中一个大于另外两个之和,我们认为其获胜。
例如,当X>Y+Z时,我们认为魏国获胜,小蓝想知道游戏结束时,如果有其中一个国家获胜,最多发生了多少个事件?如果不存在任何一个让某个国家获胜的情况,请输出-1。
【输入格式】
输入的第一行包含一个整数n。
第二行包含n个整数表示A,相邻整数之间使用一个空格分隔
第三行包含n个整数表示B,相整数之间使用一个空格分隔
第四行包含n个整数表示C,相邻整数之间使用一个空格分隔
- 先给代码,根据代码分析
print('【输入格式】\n'
'输入的第一行包含一个整数n。\n'
'第二行包含n个整数表示A,相邻整数之间使用一个空格分隔\n'
'第三行包含n个整数表示B,相整数之间使用一个空格分隔\n'
'第四行包含n个整数表示C,相邻整数之间使用一个空格分隔\n'
)
n = int(input())
A = list(map(int,input().split()))
B = list(map(int,input().split()))
C = list(map(int,input().split()))
#sorted()函数当True时降序
new_X = sorted([ A[_] - B[_] - C[_] for _ in range(n) ],reverse=True)
new_Y = sorted([ B[_] - A[_] - C[_] for _ in range(n) ],reverse=True)
new_Z = sorted([ C[_] - A[_] - B[_] for _ in range(n) ],reverse=True)
ans,resX,resY,resZ,sum_X,sum_Y,sum_Z = 0,0,0,0,0,0,0
for i in range(n):
sum_X,sum_Y,sum_Z = sum_X + new_X[i], sum_Y + new_Y[i], sum_Z + new_Z[i]
resX = resY = resZ = i + 1
if sum_X>0:
ans = max(ans,resX)
if sum_Y>0:
ans = max(ans,resY)
if sum_Z>0:
ans = max(ans,resZ)
if sum_X<=0 and sum_Y<=0 and sum_Z<=0:
break
if ans:
print(ans)
else:
print(-1)
- 巧妙地用new数组实现X,Y,Z的最优选择 new_X是X再一次操作中比Y,Z多增加的,又用sorted函数排了最优序 一次循环可同时比较三者的最优解
W3T6-力量的代价:
有一个长度为n的数组(n是10的倍数),每个数a都是区间[0, 9]中的整数。小明发现数组里每种数出现的次数不太平均,而更改第i个数的代价为bi,
他想更改若干个数的值使得这10种数出现的次数相等(都等于n/10),请问代价和最少为多少
【输入格式】
输入的第一行包括一个正整数n。
接下来n行,第i行包括两个整数ai,bi,用一个空格分隔。
- 属于最简单编程题了,avg = n/10,遍历0~9,如果某个数的数量大于avg则需要改变num[i]-avg个数字,直接选取全部i数字改变需要代价最小的前num[i]-avg个数字即可。
print('【输入格式】\n'
'输入的第一行包括一个正整数n。\n'
'接下来n行,第i行包括两个整数ai,bi,用一个空格分隔。\n'
)
n = int(input())
num,avg,res = [[]for i in range(10)],n//10,0
for i in range(n):
a,b = map(int,input().split())
num[a].append(b)
for i in range(10):
if len(num[i])>avg:
num[i].sort()
for _ in range(len(num[i])-avg):
res += num[i][_]
#res += num[i][_]在for里面实现对超出avg的数字按代价依次从小到大改变
print(res)
- 下划线用作占位符变量名还是很好用的,可学。
————————————————————————————————————————
今天轻松,继续加油💪
W3(D11)——end