蓝桥杯:Python 有T组样例(T<= 10)每组样例第一行一个数字n(n <= 1e5)第二行是一个长度为n的字符串(仅包含小写字母)对于每个样例,给出出现次数最多的字母。

本文介绍如何使用Python通过排序和计数的方法,快速找出给定字符串中出现次数最多的字母,特别强调了当有多字母出现次数相同时选择最小字母的情况。

Description

有T组样例(T<= 10)

每组样例第一行一个数字n(n <= 1e5)

第二行是一个长度为n的字符串(仅包含小写字母)

对于每个样例,给出出现次数最多的字母。

如果有多个字母出现次数最多,请输出最小的那个,例如 'a' < 'b' ,'b' <'e'

Input

有T组样例(T<= 10)

每组样例第一行一个数字n(n <= 1e5)

第二行是一个长度为n的字符串(仅包含小写字母)

Output

对每一个样列,输出一个字母

n=input()
m=int(input())
s1=input()
s1=sorted(s1)#排序,方便以后输出最小的字母
o=int(input())
s2=input()
s2=sorted(s2)
num=1#统计相同的次数
c=[]
d=[]
for i in range(m):
    num=1
    for j in range(i+1,m):
        if s1[i]==s1[j]:
            num+=1
    c.append(num)
print(s1[c.index(max(c))])#根据索引取值
num=0
for i in range(o):
    for j in range(i+1,o):
        if s2[i]==s2[j]:
            num+=1
    d.append(num)
print(s2[d.index(max(d))])

 

### 第十四届蓝桥杯 Python 研究生比赛题目及解析 #### 一、概述 第十四届蓝桥杯竞赛于2023年举办,其中Python研究生的题目涵盖了算法设计、数据结构应用以及编程技巧等多个方面。这些题目旨在考察参赛者解决实际问题的能力和逻辑思维水平[^1]。 以下是部分典型题目的描述及其解决方案: --- #### 二、具体题目与解析 ##### **试题 A: 数字统计** ###### 题目描述 输入一个整数N (1 ≤ N ≤ 1e9),计算其十进制表示中每一位上的数字之和。 ###### 思路分析 通过循环提取每位数字并累加即可完成此操作。注意处理大数值的情况以避免溢出错误。 ###### 代码实现 ```python def sum_of_digits(n): total = 0 while n > 0: total += n % 10 n //= 10 return total n = int(input()) print(sum_of_digits(n)) ``` --- ##### **试题 B: 合数个数** ###### 题目描述 定义合数为大于1且不是质数的自然数。给定区间[L, R](1 ≤ L ≤ R ≤ 1e6)该范围内有多少个合数。 ###### 思路分析 利用埃拉托色尼筛法预处理所有小于等于R的素数状态表,随后遍历范围内的每个数判断是否为合数。 ###### 代码实现 ```python def count_composites(L, R): sieve = [True] * (R + 1) sieve[0], sieve[1] = False, False for i in range(2, int(R**0.5)+1): if sieve[i]: for j in range(i*i, R+1, i): sieve[j] = False composites_count = sum(not sieve[x] for x in range(max(2,L), R+1)) return composites_count L, R = map(int, input().split()) print(count_composites(L, R)) ``` --- ##### **试题 C: 阶乘约数** ###### 题目描述 对于任意正整数K,函数f(K)返回K!的不同正约数的数量。现在给出T测试(T≤10^5)每组提供一个K值(1≤K≤1e7),请出对应的f(K)1e9+7的结果。 ###### 思路分析 基于唯一分解定理,先对前若干项进行质因数分解得到幂次分布规律;再结合合数学原理快速得出最终答案。 ###### 代码实现 ```python MOD = 10**9 + 7 MAX_K = 1_000_000 primes = [] is_prime = [True]*(MAX_K+1) for p in range(2, MAX_K+1): if is_prime[p]: primes.append(p) for multiple in range(p*p, MAX_K+1, p): is_prime[multiple] = False from collections import defaultdict import sys;input=sys.stdin.read();data=input.splitlines() precomputed_powers=defaultdict(list) for k in range(1,MAX_K+1): temp=k power_dict={} for prime in primes[:int(k**0.5)]+[k]: cnt=0 while(temp%prime==0): cnt+=1 temp//=prime if(cnt>0):power_dict[prime]=cnt precomputed_powers[k].extend([v for v in power_dict.values()]) results=[] t=int(data.pop(0)) queries=[int(x) for x in data] for query in queries: result=1 powers=precomputed_powers.get(query,[0]) for exp in powers:result=(result*(exp+1))%MOD results.append(str(result)) sys.stdout.write("\n".join(results)+"\n") ``` --- ##### **试题 D: 本质上升子序列** ###### 题目描述 设S是一个长度不超过1000字符串,由小写字母成。如果某个子串满足字符严格递增,则称为“本质上升子序列”。问最多可以找到多少种不同的此类子序列? ###### 思路分析 动态规划方法适用于本场景下的最优解路径追踪过程。建立二维数dp记录到达各位置处可能形成的有效模式数目,并逐步更新直至全局最大值被锁定下来为止。 ###### 代码实现 ```python s = input() length = len(s) if length == 0: print(0) else: dp = [[False]*26 for _ in range(length)] # 初始化第一个字母的状态 first_char_index = ord(s[0]) - ord('a') dp[0][first_char_index] = True max_subsequences = 1 for i in range(1,length): current_char_index = ord(s[i])-ord('a') # 当前字符单独成列作为新起点之一 dp[i][current_char_index] |= True for prev_char_index in range(current_char_index): if any(dp[i-1][prev_char_index]): dp[i][current_char_index]|=True subsequence_count=sum(any(row[current_char_index:])for row in dp[:i+1]) max_subsequences=max(max_subsequences,subsequence_count) print(max_subsequences) ``` --- #### §相关问题§ 1. 如何高效筛选指定区间的合数? 2. 使用埃氏筛法优化大规模数据查询时需要注意哪些细节? 3. 动态规划如何应用于寻找最长递增子序列变体问题上? 4. 对于超大数据集运算效率提升有哪些通用策略可选? 5. 在比赛中遇到未见过的新颖考点该如何应对?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值