第十四届蓝桥杯大赛软件赛省赛Python 研究生组
分糖果问题描述最近暑期特训算法班的同学们表现出色他们的老师肖恩决定给他们分发糖果。肖恩购买了 nn 个不同种类的糖果用小写的阿拉伯字母表示。每个糖果必须分发给一个同学并且每个同学至少要分到一个糖果。同学们的开心程度定义为他们所分到的糖果组成的字符串 s[i]s[i] 的字典序。肖恩希望同学们的开心程度相差尽量小因此他要找到一种方案使得所有糖果组成的字符串中字典序最大的字符串尽可能小。请输出能够实现字典序最小可能的 max(s[1],s[2],s[3],...,s[x])输入描述第一行输入两个整数 n和 x分别表示有 n 个糖果 x 个同学。第二行输入一个长度为 n 的字符串S S[i]表示第 i个糖果的种类。数据保证 1≤n≤106,1≤x≤n,S[i]∈[′a′,′z′]输出描述输出一个字符串为所有糖果组成的字符串中字典序最大的字符串最小的可能值。样例输入6 2 caabdc样例输出abccd说明一个最优分配方案是一个同学拿到 abccd 一个同学拿到 a代码n,x map(int,input().split()) s input() sorted_s .join(sorted(s)) outs [ for _ in range(x)] if nx: i0 while in: for j in range(x): if in: outs[j]sorted_s[i] else: break i1 if ix-1n and sorted_s[i]!sorted_s[n-1]: outs[0]sorted_s[i:n] break outs.sort() print(outs[-1]) else:#nx print(sorted_s[-1])子树的大小代码def solve(n,m,k): #节点为a 则最左孩子为a-1*m2 最右为a*m1 cnt 1 l (k-1)*m2 r k*m1 while ln: cnt min(n,r)-l1 l (l-1)*m2 r r*m1 return cnt q int(input()) for i in range(q): n,m,k map(int,input().split()) print(solve(n,m,k))