第一题:分糖果
题目描述:
最近暑期算法特训班的同学表现出色,她们的老师决定奖励她们,老师购买了n种不同种类的糖果,用小写的阿拉伯字母表示,每个糖果必须分给一个同学,并且每个同学至少要分到一个糖果,同学们的开心程度定义为 她们所分到的糖果组成的字符串s[i]的字典序,;老师希望同学们的开心程度尽量小,因此她要找到一种方案,使得所有糖果组成的 字符串中字典序最大的字符串尽量小,请输出字典序最小可能的Max[s[1],s[2].......s[x]]。
输入描述:
第一行输入两个整数n和x,表示有n个糖果和x个同学
第二行输入一个长度为n的字符串S,s[i]表示第i个糖果的种类
数据保证:1 <= n <= 10^6 , 1 <= x <= n,? ,s[i] = ['a','z']
输出描述:
输出一个字符串,为所有糖果组成的字符串中字典序最大的字符串最小的可能值
参考代码:
import math
n,x = map(int,input().split()) # n 是糖果的数目,x 是同学的数目
S = list(input()) # S 是列表,用来存放所有的糖果
S.sort() # 对列表进行排序
S = [''] + S
if S[1] == S[x]:
if S[x+1] == S[-1]:
print(S[x],end='')
for i in range(x+1,x+math.ceil((n-x)/x)+1):
print(S[i],end='')
else:
print(''.join(S[x:]))
else:
print(S[x])
我做这个题的时候,不知道为啥,pycharm里面运行不出来,但蓝桥杯那里是通过的,所以这个代码是没问题的。 我看了好久了,不知道哪里有问题,但是答案是正确的。
第二题:最小战斗化差距
题目描述:
小蓝是机甲战队的队长,他手下共有n名队员,每名队员都有一个战斗力值Wi,现在他需要将这n名队员分成两组a和b,分组必须满足以下条件:
每个队员都属于a组或b组;
a组和b组都不为空;
战斗力差距最小。
战斗力差距的计算公式为|max(a) - min(b)|,其中max(a)表示a组中战斗力最强的,min(b)表示b组中战斗力最弱的。
请你计算出可以得到的最小战斗力差距。
输入格式:
第一行输入一个整数n,表示队员个数;
第二行输入n个整数值W1,W2...Wn,表示每个队员的战斗力值;
数据范围保证:2 <= n <= 10^5 , 1 <= Wi <= 10^9
输出格式:
输出一个整数,表示可以得到的最小战斗力差距。
参考答案:
import math
n = int(input()) # 队员的个数
li = list(map(int,input().split())) # 队员的战斗力值
li.sort()
res = 1e9
for i in range(0,n-1):
res = min(res,li[i+1] - li[i])
print(res)
运行结果:
?
这个题和上一个题就一个类型,有不清楚的可以问我的。(思路很清晰,但是不知道咋写)
第三题:小蓝的零花钱
题目描述:
小蓝和小桥正在玩一个游戏 ,他们有一个长度为n的序列,其中既有奇数又有偶数,且偶数和奇数的 数量相等;
小蓝有一些零花钱,他想用这些钱来做一些特殊的操作:他在序列中选择一个位置,然后在这个位置上将序列分成两段,要求每一段中偶数和奇数的数量都相等,小蓝想用他的零花钱尽可能多的做这个操作,但每次操作都需要有代价。换而言之,每次选取位置相当于对序列进行切割,每次的代价是需要花费切割序列两端的元素的差的绝对值。小蓝想知道,在他的预算范围内,最多能进行几次操作?
输入描述:
第一行输入两个数n和B(2 <= n <= 100 , 1 <= B <= 100),表示序列的长度和小蓝拥有的零花钱数;
第二行包括n个整数a1,a2.....an(1 <= ai <= 100),表示给定的序列(保证此序列中奇数的个数等于偶数的个数);
输出格式:
输出一个整数,表示在他的预算范围内,最多能进行几次操作
参考答案:
n,B = map(int,input().split())
li = list(map(int,input().split()))
tot = 0
cnt = []
for i in range(len(li) - 1):
if li[i] % 2 == 0:
tot += 1
else:
tot -= 1
if tot == 0:
cnt.append(li[i+1] - li[i])
cnt.sort()
ans = 0
for c in cnt:
if c <= B:
ans += 1
B -= c
else:
break
print(ans)
运行结果:
?
OK,最近期末复习,时间紧,需要几天 才能写完一篇,就这样吧,下次继续!