当前位置: 首页 > news >正文

词频统计 ccf-csp 2024-2-1

在学习了文本处理后,小 PP 对英语书中的 nn 篇文章进行了初步整理。

具体来说,小 PP 将所有的英文单词都转化为了整数编号。

假设这 nn 篇文章中共出现了 mm 个不同的单词,则把它们从 11 到 mm 进行编号。

这样,每篇文章就简化为了一个整数序列,其中每个数都在 11 到 mm 范围内。

现给出小 PP 处理后的 nn 篇文章,对于每个单词 ii(1≤i≤m1≤i≤m),试统计:

  1. 单词 ii 出现在了多少篇文章中?
  2. 单词 ii 在全部文章中总共出现了几次?
输入格式

输入共 n+1n+1 行。

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

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

输出格式

输出共 mm 行。

第 ii 行输出由空格分隔的两个整数 xixi 和 yiyi,表示共有 xixi 篇文章包含单词 ii,总计出现次数为 yiyi。

数据范围

全部的测试数据满足 0<n,m≤1000<n,m≤100,且每篇文章至少包含一个单词、最多不超过 100100 个单词(1≤li≤1001≤li≤100)。

输入样例:
4 3
5 1 2 3 2 1
1 1
3 2 2 2
2 3 2
输出样例:
2 3
3 6
2 2
样例解释

单词 22 在:

  • 文章 11 中出现两次;
  • 文章 33 中出现三次;
  • 文章 44 中出现一次。

因此 x2=3,y2=6x2=3,y2=6。

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	// n 表示文章的篇数,m 表示单词编号的上限
	int n, m;
	// x[i] 用于记录单词 i 出现在多少篇文章中
	int x[101];
	// y[i] 用于记录单词 i 在全部文章中总共出现的次数
	int y[101];
	// t[i] 用于记录单词 i 上一次出现所在文章的编号
	// 通过比较这个编号和当前文章编号,判断单词是否在新文章中出现
	int t[101];
    cin >> n >> m;
    // a 用于存储当前文章的长度(单词个数)
    // b 用于临时存储当前文章中读取的单词编号
    int a, b;
    // 遍历每一篇文章,n 在这里也作为文章编号,从 n 到 0
    while(n --)
    {
        // 读取当前文章的长度
        cin >> a;
        // 遍历当前文章中的每个单词
        for(int i = 1; i <= a ; i ++)  
        {
            // 读取当前文章中的一个单词编号
            cin >> b;
            // 判断单词 b 是否在新的文章中出现
            // t[b] 记录了单词 b 上一次出现所在文章的编号
            // 如果 t[b] 不等于当前文章编号 n,说明单词 b 在新文章中首次出现
            if(t[b] != n) {
                // 单词 b 出现的文章篇数加 1
                x[b] ++;
                // 更新单词 b 所在的文章编号为当前文章编号
                t[b] = n;
            }
            // 无论单词 b 是否在新文章中出现,只要出现,其总出现次数就加 1
            y[b]++; 
        }
    }
    // 遍历从 1 到 m 的每个单词编号
    for(int i = 1; i <= m ; i ++)
    {
        // 输出单词 i 出现的文章篇数和在所有文章中的总出现次数
        cout << x[i] << " " << y[i] << endl;
    }
    return 0;
}

相关文章:

  • 如何对一个无序单链表排序
  • XSS漏洞靶场---(复现)
  • 设计模式-对象创建
  • 物联网中RFID标签需要人为赋予信息和手动粘贴/挂载的问题
  • Ubuntu快速安装使用gRPC C++
  • Oracle 数据库 HugePages 配置详解:提升性能的关键步骤
  • C语言学习笔记(第三部份)
  • 解决: 由于embedding 模型不可用,需要配置默认embedding 模型
  • 【Go每日一练】随机密码生成器
  • 从数据清洗到模型调优的全流程实战
  • 【AutoFormer 源码理解】
  • 从“自习室令牌”到线程同步:探秘锁与条件变量
  • 基于Python的tkinter开发的一个工具,解析图片文件名并将数据自动化导出为Excel文件
  • 深度学习pytorch笔记:TCN
  • 从零开始使用 **Taki + Node.js** 实现动态网页转静态网站的完整代码方案
  • 谈谈 TypeScript 中的联合类型(union types)和交叉类型(intersection types),它们的应用场景是什么?
  • 代码随想录算法训练营第34天 | 62.不同路径 63. 不同路径 II 整数拆分 不同的二叉搜索树 (跳过)
  • linux(centos8)下编译ffmpeg
  • HCIA-PPP
  • 每天五分钟深度学习PyTorch:循环神经网络RNN的计算以及维度信息
  • 习近平同巴西总统卢拉共同会见记者
  • 首映|奥斯卡最佳国际影片《我仍在此》即将公映
  • 巴基斯坦全国航班仍持续延误或取消
  • 重庆三峡学院回应“85万元中标设备,网购价不到300元”:已着手解决
  • 非洲雕刻艺术有着怎样的“变形之美”
  • 巴基斯坦总理:希望通过和平对话方式解决与印方问题