【CSP】202403-1 词频统计

2024年 第33次CCF计算机软件能力认证  202403-1 词频统计

原题链接:TUOJ (thusaac.com)

时间限制: 1.0 秒

空间限制: 512 MiB

目录

题目描述

输入格式

输出格式

样例输入

样例输出

样例解释

子任务

解题思路

AC代码


题目描述

在学习了文本处理后,小 P 对英语书中的 𝑛 篇文章进行了初步整理。 具体来说,小 P 将所有的英文单词都转化为了整数编号。假设这 𝑛 篇文章中共出现了 𝑚 个不同的单词,则把它们从 1 到 𝑚 进行编号。 这样,每篇文章就简化为了一个整数序列,其中每个数都在 1到 𝑚 范围内。

现给出小 P 处理后的 𝑛 篇文章,对于每个单词 𝑖i(1≤𝑖≤𝑚),试统计:

  1. 单词 𝑖 出现在了多少篇文章中?
  2. 单词 𝑖在全部文章中总共出现了几次?

输入格式

从标准输入读入数据。

输入共 𝑛+1 行。

输入的第一行包含两个正整数 𝑛n 和 𝑚m,分别表示文章篇数和单词编号上限。

输入的第 𝑖+1 行(1≤𝑖≤𝑛)包含由空格分隔的若干整数, 其中第一个整数 𝑙𝑖 表示第 𝑖i 篇文章的长度(单词个数); 接下来 𝑙𝑖 个整数表示对应的整数序列,序列中每个整数均在 1 到 𝑚 范围内,各对应原文中的一个单词。

输出格式

输出到标准输出。

输出共 𝑚 行。

第 𝑖 行(1≤𝑖≤𝑚)输出由空格分隔的两个整数 𝑥𝑖​ 和 𝑦𝑖,表示共有 𝑥𝑖篇文章包含单词 𝑖i,总计出现次数为 𝑦𝑖​。

样例输入

4 3
5 1 2 3 2 1
1 1
3 2 2 2
2 3 2

样例输出

2 3
3 6
2 2

样例解释

单词 22 在:

  • 文章 1 中出现两次;
  • 文章 3 中出现三次;
  • 文章 4 中出现一次。

因此 𝑥2=3、y2​=6。

子任务

全部的测试数据满足 0<𝑛,𝑚≤100,且每篇文章至少包含一个单词、最多不超过 100 个单词(1≤𝑙𝑖≤100)。

解题思路

1.用数组存放数据,单词出现次数、单词在不同文章中出现次数以及单词所在文章都需要记录在数组里面。

2.边输入边处理,把一组数看作一个元素反复输入。

3.实时更新单词所在文章,并与之前记录的单词所在文章作对比,依据此确定单词 𝑖 是否出现在了新的文章中,若是,则单词在不同文章中出现次数+1.

AC代码

#include<bits/stdc++.h>

using namespace std;

int n, m;
int x[1010], y[1010], t[1010];
//x[i]:单词i在哪篇文章中出现  
//y[i]:单词i出现次数 
//t[i]:单词i在哪篇文章中出现了 

int main()
{
	cin >> n >> m;
	int a, b;
	while(n --)
	{
		cin >> a;

		for(int i = 1; i <= a ; i ++)  
		{
			cin >> b;
			//若单词b在一个新文章里出现 (注意是和n作比较而不是和a作比较 每轮一次 a的值可能会和前面的a重复 但n不会) 
			//则文章+1 并更新单词b所在的文章 
			if(t[b] != n) x[b] ++, t[b] = n;
			y[b]++; //单词b只要出现 则单词b出现总次数+1 
		}
	}
	 //一共有m个不同的单词  
	for(int i = 1; i <= m ; i ++)
	{
		cout<< x[i] << " " << y[i]<< endl;
	}
	return 0;
} 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值