CCFCSP备考第一天

第33次认证第一题——词频统计

时间限制: 1.0 秒

空间限制: 512 MiB

下载题目目录(样例文件)

题目描述

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

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

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

输入格式

从标准输入读入数据。

输入共 n+1 行。

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

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

输出格式

输出到标准输出。

输出共 m 行。

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

样例输入

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 中出现一次。

因此 x2=3、y2=6。

子任务

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

参考题解

#include<iostream>
#include<vector>
#include<cstring> //用于memset 
using namespace std;

int main()
{
	vector<vector<int> > data; //注意不要写成>>,要有空格,否则编译器会认为这是一个位移运算符!!
	int n, m;
	cin>> n >> m;
	int result[m][2] = {0}; //输出结果,行数为单词编号,列数为2,分别是文章数,出现次数
	
	/*注意,C++中局部数组不会自动初始化为0!要手动初始化!!*/ 
	//memset(result, 0, sizeof(result)); 傻了,直接在定义时初始化效率更高
	 
	for(int i = 0; i < n; i++){
		int count; //该行有多少个字母,即后面还有多少个int数值 
		cin >> count;
		vector<int> row_data;
//		bool flag = true;单个不行,应该要给每个单词设置一个flag
		bool appeared[m];
		memset(appeared, 0, sizeof(appeared)); //初始化为false
		 
		for(int j = 0; j < count; j++){
			int num;
			cin >> num;
			row_data.push_back(num);
			
			if(!appeared[num-1]){
				appeared[num-1] = true; //一篇文章只统计一次 
				result[num-1][0] += 1;//出现的文章数+1
			}
			result[num-1][1] += 1;//单词出现数+1 
		}
		data.push_back(row_data);
	}
	
	cout << "读取数据如下" << endl;
	for(const auto& row : data){
		for(const auto&num : row){
			cout << num << " ";
		}
		cout << endl;
	}
	cout << "输出结果如下" << endl;
	for(int i = 0; i < m; i++){
		cout << result[i][0] <<" " << result[i][1]<< endl;
	} 
	return 0;
}

简化版

#include <iostream>
#include <vector>
#include <cstring>  // 用于 memset
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    int result[m][2];  // 输出结果,行数为单词编号,列数为2,分别是文章数,出现次数
    
    // 注意,C++中局部数组不会自动初始化为0!要手动初始化!!
    memset(result, 0, sizeof(result));

    // 遍历每篇文章
    for (int i = 0; i < n; i++) {
        int count;
        cin >> count;
        bool appeared[m] = {false};  // 每篇文章内单词是否出现的标记

        for (int j = 0; j < count; j++) {
            int num;
            cin >> num;

            // 如果该单词尚未在本篇文章中出现过,增加文章数
            if (!appeared[num - 1]) {
                appeared[num - 1] = true;
                result[num - 1][0] += 1;  // 出现的文章数 + 1
            }
            result[num - 1][1] += 1;  // 单词出现次数 + 1
        }
    }

    // 输出结果
    for (int i = 0; i < m; i++) {
        cout << result[i][0] << " " << result[i][1] << endl;
    }
    return 0;
}

记录

1、刚开始flag设置有误,统计后结果不对

此外还发现每次结果不一样,多运行几次后直接数值越界变负数了,思考后认为是内存未释放,多次运行用的相同的内存保存变量,未初始化,结果累积了。

解决

C++的数组需要手动初始化----直接在定义时初始化就行(和下面的bool数组类似)

get到一个bool数组赋值小技巧(也不是小技巧,就是一个常识了,好久没写C++我给忘了,哭)

感想

好久没写C++了,手生了,这次还是有不少收获的,以后每天至少要完成一题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967967.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

接口测试Day12-持续集成、git简介和安装、Gitee远程仓库、jenkins集成

持续集成 概念&#xff1a; 团队成员将自己的工作成果&#xff0c;持续集成到一个公共平台的过程。成员可以每天集成一次&#xff0c;也可以一天集成多 次。 相关工具&#xff1a; 本地代码管理&#xff1a;git远程代码管理&#xff1a;gitee(国内)、github(国外)、gitlib(公司…

C# OpenCV机器视觉:智能水果采摘

在一个风景如画的小镇边上&#xff0c;有一座阿强家祖传的果园。每到水果成熟的季节&#xff0c;果园里硕果累累&#xff0c;红彤彤的苹果、黄澄澄的梨子、紫莹莹的葡萄&#xff0c;散发着诱人的香气。然而&#xff0c;这丰收的喜悦却总被一件烦心事笼罩 —— 摘水果。 “哎呀…

腾讯云大数据套件TBDS与阿里云大数据能力产品对比

前言 博主在接触大数据方向研究的时候是在2016年,那时候正是大数据概念非常火热的一个时间段,最著名的Google的3篇论文。Google FS、MapReduce、BigTable,奠定了大数据框架产品的基础。Google文件系统,计算框架和存储框架。往后所有的大数据产品和过程域无一不是在三个模块…

设计高效的测试用例:从需求到验证

在现代软件开发过程中&#xff0c;测试用例的设计一直是质量保证&#xff08;QA&#xff09;环节的核心。有效的测试用例不仅能够帮助发现潜在缺陷&#xff0c;提升软件质量&#xff0c;还能降低后期修复成本&#xff0c;提高开发效率。尽管如此&#xff0c;如何从需求出发&…

荣耀手机Magic3系列、Magic4系列、Magic5系列、Magic6系列、Magic7系列详情对比以及最新二手价格预测

目录 荣耀Magic系列手机详细对比 最新二手价格预测 性价比分析 总结 以下是荣耀Magic系列手机的详细对比以及最新二手价格预测&#xff1a; 荣耀Magic系列手机详细对比 特性荣耀Magic3系列荣耀Magic4系列荣耀Magic5系列荣耀Magic6系列荣耀Magic7系列处理器骁龙888&#x…

JAVA-枚举的使用

目录 一、枚举的意义 二、enum类的使用 1.switch 2.常用方法 2.1 values() 和 ordinal() 2.1.1 Enum基本介绍 2.2 valueOf() 2.3 compareTo() 三、枚举的优点和缺点 四、枚举安全在什么地方 一、枚举的意义 public static final int RED 1; public static final int…

前端实现在PDF上添加标注(1)

前段时间接到一个需求&#xff0c;用户希望网页上预览PDF&#xff0c;同时能在PDF上添加文字&#xff0c;划线&#xff0c;箭头和用矩形框选的标注&#xff0c;另外还需要对已有的标注进行修改&#xff0c;删除。 期初在互联网上一通搜索&#xff0c;对这个需求来讲发现了两个问…

Visual Studio Code中文出现黄色框子的解决办法

Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”&#xff0c;往下滑动&#xff0c;找到“Un…

二分算法篇:二分答案法的巧妙应用

二分算法篇&#xff1a;二分答案法的巧妙应用 那么看到二分这两个字想必我们一定非常熟悉&#xff0c;那么在大学期间的c语言的教学中会专门讲解二分查找&#xff0c;那么我们来简单回顾一下二分查找算法&#xff0c;我们知道二分查找是在一个有序的序列中寻找一个数在这个序列…

项目6:基于大数据校园一卡通数据分析和可视化

1、项目简介 本项目是基于大数据的清华校园卡数据分析系统&#xff0c;通过Hadoop&#xff0c;spark等技术处理校园卡交易、卡号和商户信息数据。系统实现消费类别、男女消费差异、学院消费排行和年级对比等分析&#xff0c;并通过Web后端和可视化前端展示结果。项目运行便捷&…

怎么在win10系统批量生成下面目录示例文件?

环境&#xff1a; win10系统 问题描述&#xff1a; 怎么在win10系统批量生成下面目录示例文件&#xff0c;刚好有个开源项目要新建 GitHub地址&#xff1a;https://github.com/latiaoge/AI-Sphere-Butler ai-sphere-butler/ # 项目根目录 ├── docs/ …

Java在大数据处理中的应用:从MapReduce到Spark

Java在大数据处理中的应用&#xff1a;从MapReduce到Spark 大数据时代的到来让数据的存储、处理和分析变得前所未有的重要。随着数据量的剧增&#xff0c;传统的单机计算方式已经无法满足处理需求。为了解决这个问题&#xff0c;许多分布式计算框架应运而生&#xff0c;其中Ma…

Pdf手册阅读(1)--数字签名篇

原文阅读摘要 PDF支持的数字签名&#xff0c; 不仅仅是公私钥签名&#xff0c;还可以是指纹、手写、虹膜等生物识别签名。PDF签名的计算方式&#xff0c;可以基于字节范围进行计算&#xff0c;也可以基于Pdf 对象&#xff08;pdf object&#xff09;进行计算。 PDF文件可能包…

运放放大器

1 运放是什么 1.1 运算放大器&#xff0c;常用于做信号处理。如:信号放大、滤波、积分、微分、整流、甚至可以用来做电路主控等等。其功能非常强大 1.2 运放的重要特性 虚短 &#xff08;前提是要有负反馈&#xff09; 1.2.1 虚短的概念是指运放在正常工作过程中&#xff0c…

UE求职Demo开发日志#28 初期几个流程的实现

1 第一小节流程梳理 进入游戏--> 弹出几个文本框介绍背景--> 接取任务收集资源-> 打怪获得源能结晶--> 场景里获得一些金属碎片--> 用源能和金属修复合成台--> 完成第一个任务--> 接第二个任务&#xff0c;打带精英怪的一波&#xff08;小怪1换颜…

【Docker】从瀑布开发到敏捷开发

引言 软件开发方法论是指导团队如何规划、执行和管理软件项目的框架。随着软件行业的不断发展&#xff0c;开发方法论也在不断演进。从传统的瀑布开发到现代的敏捷开发&#xff0c;软件开发方法论经历了深刻的变革。本文将详细探讨瀑布开发和敏捷开发的定义、特点、优缺点以及…

Docker安装常用软件说明

1.总体步骤 2.安装tomcat docker run -d -p 8080:8080 --name tomcat1 tomcat:11.0.8 访问tomcat猫首页 出现404 这是正常情况 Docker 默认采用的是 NAT 网络模式&#xff0c;所以会自动创建 IPtable 规则并自动开放端口&#xff0c;所以无需考虑防火墙问题 新版Tomcat已经…

Node.js笔记入门篇

黑马程序员视频地址&#xff1a; Node.js与Webpack-01.Node.js入门 基本认识 概念 定义&#xff1a;Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境, 它让开发人员能够创建服务器 Web 应用、命令行工具和脚本 作用&#xff1a;使用Node.js 编写服务器端程序 ✓ …

以简单的方式过一生

这本书大体讲述了三方面的内容&#xff1a;工作、生活、人际交往。我目前工作方面的认知需求比较大&#xff0c;就把工作部分的内容看了一下&#xff0c;其他两个方面就略看了&#xff0c;在这里就不展开了。 一、成为结果导向的人&#xff1a; 如何让自己在职场上成为明确结果…

软件工程教育的革命:AI辅助学习与实践

软件工程教育正面临着巨大的挑战。传统的教学模式往往以理论讲解为主&#xff0c;实践机会不足&#xff0c;导致学生难以将理论知识转化为实际技能。此外&#xff0c;繁琐的代码编写和项目搭建过程也常常耗费学生大量时间和精力&#xff0c;影响学习效率。为了解决这些问题&…