PTA乙级_1038 统计同成绩学生 (20分)_python 无超时

题目:

本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出。
输入格式:
输入在第 1 行给出不超过 10​5​​ 的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。
输出格式:
在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。
输入样例:
10
60 75 90 55 75 99 82 90 75 50
3 75 90 88
输出样例:
3 2 0

思路:题目很简单,但是用python容易出现超时问题,下面是超时的代码,通过一个count函数很容易就得到对应的分数出现了几次,代码很简单,不详细讲了,下面有无超时的。

n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
result = []
for i in b[1:]:
    result.append(str(a.count(i)))
print(' '.join(result))

技巧:这个题目和之前几个容易超时的题目一样,在这里面像对数计数的,可以采用列表、字典等数据结构将所有可能出现的数据全部保存起来,然后对照去取出来就不会超时了,下面是无超时的代码。可以看一下之前几个题目的解法,多看几个,以后遇到这种问题就知道怎么处理了,在我发的文章中,出现了超时的文章就会标注。
这里将分数存储到一个列表中,列表的下标就对应着分数。代码很简单,不多讲解。

n = int(input())
a = list(map(int, input().split()))
grade = [0 for i in range(101)]
for m in a:
    grade[m] += 1
result = []
b = list(map(int, input().split()))
for n in b[1:]:
    result.append(str(grade[n]))
print(' '.join(result))
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sky丶Mamba

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值