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

202403-02-相似度计算 csp认证

在这里插入图片描述

其实这个问题就是求两篇文章的词汇的交集和并集,首先一说到并集,我就想到了set集合数据结构,set中的元素必须唯一。
STL之set的基本使用–博客参考

  • 所以将两个文章的词汇全部加入set中,并求出set的大小,即为并集的大小。
#include <iostream>
#include <string>
#include <set>using namespace std;void toupper(string &str)
{for (int i = 0; i < str.size(); i++){if (str[i] >= 'a' && str[i] <= 'z'){str[i] = str[i] - ('a' - 'A');}}
}int main() {int n, m;cin >> n >> m;string word;set<string> first_set;  // 存储第一篇文章的单词set<string> union_set;  // 存储并集// 读取第一篇文章for(int i = 0; i < n; i++){cin >> word;toupper(word);first_set.insert(word);union_set.insert(word);} int intersection = 0;  // 交集数量// 读取第二篇文章for(int i = 0; i < m; i++){cin >> word;toupper(word);// 判断是否在第一篇文章中出现过if(first_set.find(word) != first_set.end()){intersection++;first_set.erase(first_set.find(word)); // 在第一篇文章的set中删除,这样第二篇文章中出现 连续两个the的时候只会统计一次 }// 加入并集union_set.insert(word);} // 输出结果cout << "交集数量: " << intersection << endl;cout << "并集数量: " << union_set.size() << endl;system("pause");  // 仅用于调试环境,提交代码时建议移除return 0;
}

但是我一开始选用的是unordered_map。。。我也不知道为什么、

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
void toUpperCase(string &str)
{for (int i = 0; i < str.size(); i++){if (char(str[i]) >= 'a' && char(str[i])  'z'){str[i] = str[i] - (char('a') - 'A');}}
}void PrintMap(const unordered_map<string, int>& rd)
{cout << "------------------" << endl;for (auto i : word){cout << i.first << " " << i.second << dl;}}
int main()
{int n, m; // 两篇文章的单词个数cin >> n >> m;string word;unordered_map<string, int> nword;unordered_map<string, int> mword;unordered_map<string, int> mixed;for (int i = 0; i < n; i++){cin >> word;toUpperCase(word);nword[word] = 1;mixed[word]++;}int sum = 0; // 并集数量 for (int i = 0; i < m; i++){cin >> word;toUpperCase(word);mixed[word]++;if(nword[word] > 0 && mword[word] == 0){ // 如果在第一篇文章已经存在 而且是第二篇文章第一次读取到 sum++;}mword[word] = 1;}PrintMap(nword), PrintMap(mword);PrintMap(mixed);cout << sum << endl;cout << mixed.size() << endl;system("pause");return 0;
}//更加节省空间的方法 
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
void toUpperCase(string &str)
{for (int i = 0; i < str.size(); i++){if (char(str[i]) >= 'a' && char(str[i]) <= 'z'){str[i] = str[i] - (char('a') - 'A');}}
}void PrintMap(const unordered_map<string, int>& word)
{cout << "------------------" << endl;for (auto i : word){cout << i.first << " " << i.second << endl;}}
int main()
{int n, m; // 两篇文章的单词个数cin >> n >> m;string word;    unordered_map<string, int> mixed;for (int i = 0; i < n; i++){cin >> word;toUpperCase(word);mixed[word] = 1; // 表示在两篇文章中第一篇出现 }int sum = 0; // 并集数量 for (int i = 0; i < m; i++){cin >> word;toUpperCase(word);if(mixed[word] == 1){sum++;mixed[word] = 2; // 表现在第二篇出现 } }PrintMap(mixed);cout << sum << endl;cout << mixed.size() << endl;return 0;
}

相关文章:

  • 矩阵快速幂算法快速上手
  • mkcert实现本地https
  • 界面形成能的理解
  • 【android bluetooth 协议分析 03】【蓝牙扫描详解 1】【扫描关键函数 btif_dm_search_devices_evt 分析】
  • 基于大模型的数据库MCP Server设计与实现
  • 电子电器架构 --- OTA测试用例分析(上)
  • WIN32-内存管理
  • 钉钉红包性能优化之路
  • Maven 安装与配置指南(适用于 Windows、Linux 和 macOS)
  • 数字化浪潮下:信息化教学模式与人工智能的协同创新发展研究
  • 大数据处理中数据倾斜的深度解析与优化实践
  • java程序从服务器端到Lambda函数的迁移与优化
  • 杨辉三角系数
  • [LitCTF 2024]SAS - Serializing Authentication
  • 智慧物流园区整体解决方案
  • Java 中 Lock 接口详解:灵活强大的线程同步机制
  • AI笔记 - 网络模型 - mobileNet
  • 【沉浸式求职学习day51】【发送邮件】【javaweb结尾】
  • Python 爱心图案代码
  • [SC]SystemC在CPU/GPU验证中的应用(五)
  • 如何做手机网站/百度手机助手下载安装
  • 做网站广告费/360优化大师官方官网
  • 最有设计感的网站/守游网络推广平台登陆
  • 网站开发服务费/关键词吉他谱
  • 怎么找做网站平台公司/核酸检测最新消息
  • 建设网购网站/北京seo培训机构