第33次CCF-CSP计算机软件能力认证——词频统计
第1题——词频统计
题目描述
在学习了文本处理后,小 P 对英语书中的 𝑛 篇文章进行了初步整理。 具体来说,小 P 将所有的英文单词都转化为了整数编号。假设这 𝑛 篇文章中共出现了 𝑚m 个不同的单词,则把它们从 1 到 𝑚 进行编号。 这样,每篇文章就简化为了一个整数序列,其中每个数都在 1 到 𝑚 范围内。
现给出小 P 处理后的 𝑛 篇文章,对于每个单词 𝑖(1≤𝑖≤𝑚),试统计:
- 单词 𝑖 出现在了多少篇文章中?
- 单词 𝑖 在全部文章中总共出现了几次?
输入格式
从标准输入读入数据。
输入共 𝑛+1 行。
输入的第一行包含两个正整数 𝑛 和 𝑚,分别表示文章篇数和单词编号上限。
输入的第 𝑖+1 行(1≤𝑖≤𝑛)包含由空格分隔的若干整数, 其中第一个整数 𝑙𝑖 表示第 𝑖 篇文章的长度(单词个数); 接下来 𝑙𝑖 个整数表示对应的整数序列,序列中每个整数均在 1 到 𝑚 范围内,各对应原文中的一个单词。
输出格式
输出到标准输出。
输出共 𝑚 行。
第 𝑖 行(1≤𝑖≤𝑚)输出由空格分隔的两个整数 𝑥𝑖 和 𝑦𝑖 ,表示共有 𝑥𝑖 篇文章包含单词 𝑖,总计出现次数为 𝑦𝑖 。
样例输入
4 3
5 1 2 3 2 1
1 1
3 2 2 2
2 3 2
样例输出
2 3
3 6
2 2
样例解释
单词 2 在:
- 文章 1 中出现两次;
- 文章 3 中出现三次;
- 文章 4 中出现一次。
因此 𝑥2=3、𝑦2=6。
子任务
全部的测试数据满足 0<𝑛,𝑚≤1000<n,且每篇文章至少包含一个单词、最多不超过 100个单词(1≤ 𝑙𝑖 ≤100)。
解题
既然是统计频率,和重复局面一样,我们可以无脑使用python的字典功能。但是,此题如果这样做可能会超时,拿不到分。所以,我们边循环边计算的同时,把结果也以一并输出。
代码如下
第一题强烈推荐使用Python无脑拿分。
n, m = map(int, input().split())
jlo = [[i for i in map(int, input().split())] for j in range(n)]
for i in range(1, m+1):
m = 0
c = 0
for j in range(n):
Tom = False
for k in range(1, jlo[j][0]+1):
if i == jlo[j][k]:
m += 1
Tom = True
if Tom:
c += 1
print(c, m)
之后会考虑出B站视频讲解,记得点赞关注哦!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)