一:题目

实现一种简单原始的文件相似度计算,即以两文件的公共词汇占总词汇的比例来定义相似度。为简化问题,这里不考虑中文(因为分词太难了),只考虑长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。

输入格式:
输入首先给出正整数N(≤100),为文件总数。随后按以下格式给出每个文件的内容:首先给出文件正文,最后在一行中只给出一个字符#,表示文件结束。在N个文件内容结束之后,给出查询总数M(≤10
4
),随后M行,每行给出一对文件编号,其间以空格分隔。这里假设文件按给出的顺序从1到N编号。

输出格式:
针对每一条查询,在一行中输出两文件的相似度,即两文件的公共词汇量占两文件总词汇量的百分比,精确到小数点后1位。注意这里的一个“单词”只包括仅由英文字母组成的、长度不小于3、且不超过10的英文单词,长度超过10的只考虑前10个字母。单词间以任何非英文字母隔开。另外,大小写不同的同一单词被认为是相同的单词,例如“You”和“you”是同一个单词。

输入样例:

3
Aaa Bbb Ccc
#
Bbb Ccc Ddd
#
Aaa2 ccc Eee
is at Ddd@Fff
#
2
1 2
1 3

输出样例:

50.0%
33.3%

二:思路

用到了set容器,这个容器我也是第一次用,这个他有自动去重的特性,而且,这个容器相较于map容器他只有关键值 ,其他用法类似,但要在注意的是,这里的迭代器都是指针,即遍历容器返回值都是指针

三:知识速递(对set容器不了解的兄弟们来看一下)

set基本用法

四:上码(来兄弟们 干了这杯码 我们来日方长)

#include<bits/stdc++.h>
using namespace std;set<string>s[100]; void  manage(string str,int x){string word = "";//初始化字符串 str+="!";//表示最后一个单词的结束  什么符号都可以 for( int i = 0; i < str.size(); i++ ){if( isalpha (str[i]) ){//判断单个字符是否为字母 if( word.size() < 10){//处理字母个数小于10个的单词 word+=tolower(str[i]);//将大写字母转换成小写字母 }}else{if( word.size() > 2 ){s[x].insert(word);}word.clear();//将字符串的内容清空  为下一次调用函数做准备 } }
}int main(){int N;cin >> N;getchar();//处理换行符  当cin 和 getline() 一块用的时候 for( int i = 0; i < N; i++ ){string str = "";//初始化字符串 while( str != "#" ){manage(str,i);getline(cin,str);//每次是读进来一行 }}
//    set<string>::iterator t;
//  for( t = s[0].begin(); t != s[0].end(); t++ ){//      cout << *t << ' ';
//  }int M;cin >> M; for( int i = 0; i < M; i++ ){int a,b,count = 0;cin >> a >> b;a--; b--;int total_length = s[a].size() + s[b].size();set<string>::iterator t;for( t = s[a].begin(); t != s[a].end(); t++ ){if( s[b].find(*t) != s[b].end() )//判断相同元素的个数 count++;} // cout <<  total_length << endl;printf("%0.1lf%\n",100.0 * count/(total_length - count)); } }

五:总结

这道题思路不是我的,我是没思路,就学大佬的了,但也是收获满满,我又学到一种容器 set;我前面在学map容器时就遇到过,但我没去学,因为没用到过,等到用到了再去学,在我看来,知识是永远学不完的,我们必须先上路,遇到什么问题就解决什么问题。不断扩充我们的武器库,比如map,vector,再接下来set;我会的会越来越多 ,加油BOY!我们共同进步!

7-44 基于词频的文件相似度 (30 分)(思路加详解+set容器简便做法)兄弟们冲呀呀呀呀呀 今天你AC了吗相关推荐

  1. PAT 基于词频的文件相似度 (set) -- 解题报告

    解题思路 每个文件内的单词存放到单独的一个 set 中.询问时直接遍历其中一个 set(必须是 size 较小的那个,否则会超时在最后一个测试点),用 count() 查找另一个 set 中存不存在这 ...

  2. 基于词频的文本相似度

    基于词频的文本相似度 文本 分词 统计词频 词频向量 相似度计算 应用 项目源码: https://github.com/zhang2172268/mygit/tree/master/textSimi ...

  3. 基于PHP和JS的AES相互加密解密方法详解(CryptoJS)

    在最近的项目中,前端后台数据交互需要进行加密之后传输使用,以保证系统数据的安全.有关数据加密解密的问题,有很多种加密的方式,在这里我选择了AES的加密方式.特此写下此篇博文,总结讲述下PHP和JS进行 ...

  4. 搬砖:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议--QUIC详解 本文来自腾讯资深研发工程师罗成的技术分享,主要介绍 QUIC 协议产生的背景和核心特性等. 1.写在前面 如果你的 App,在不需要任 ...

  5. java 生成dump_java dump文件怎么生成和分析-JMAP用法详解

    jmap是java自带的工具 1. 查看整个JVM内存状态 jmap -heap [pid] 2. 查看JVM堆中对象详细占用情况 jmap -histo [pid] 3. 导出整个JVM 中内存信息 ...

  6. java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...

  7. python os模块安装方法_基于python中pygame模块的Linux下安装过程(详解)

    一.使用pip安装Python包 大多数较新的Python版本都自带pip,因此首先可检查系统是否已经安装了pip.在Python3中,pip有时被称为pip3. 1.在Linux和OS X系统中检查 ...

  8. linux下grep文件内容搜索工具及基本正则表达式详解

    linux下grep文件内容搜索工具及基本正则表达式详解 grep命令: 根据模式(文本字符和基本正则表达式的元字符组合而成之匹配条件)搜索文本, 并将符合模式的文本行显示出来. 格式:grep [选 ...

  9. python交互式和文件式区别_Python 运行.py文件和交互式运行代码的区别详解

    代码版本:3.6.3 1. 交互式运行代码会直接给出表达式的结果,运行代码文件必须print才能在控制台看到结果. 直接给出结果: 没有print是看不到结果的: 有print才能看到结果: 另:交互 ...

最新文章

  1. 机器学习论文推荐 | 2019 Reddit最受喜欢的5篇AI论文
  2. case when完成不同条件的显示
  3. 【转】BI 入门: 体系架构及相关技术
  4. 南工院linux考试题库,操作系统复习题..doc
  5. 创业编程七个错误认识
  6. 简述python常用的函数模块_Python学习笔记(十三)—函数常用模块
  7. WinAPI: LoadBitmap - 从资源中载入位图
  8. C++习题 对象数组输入与输出
  9. 交换机解决电脑IP地址冲突
  10. 2020数学建模国赛A题解题思路
  11. 真热闹,华为阿里腾讯加入中文编程争夺,抢风头的却另有其人
  12. 本地spa应用的nginx简单配置
  13. 层次分析法(AHP)基础概念整理+步骤总结
  14. Linux是如何避免内存碎片的
  15. 基于流的(Flow-based)生成模型简介
  16. Linux命令和Git命令
  17. 知乎高赞 | 有哪些对职业生涯帮助巨大的工作习惯?
  18. 【行研报告】2021年新闻、媒体和科技趋势报告(英文)——附下载链接
  19. wend计算机语言,语用逻辑及其在计算机语言和人工智能中的应用
  20. 一个1.1~1.6GHz的威尔金森功一分四功分器设计

热门文章

  1. 英语自动提取高频词_斑马英语提分营免费体验课
  2. [转]解决Android studio升级到3.5的一些问题
  3. 【MATLAB统计分析与应用100例】案例003:matlab调用smooth函数进行加噪数据的平滑处理
  4. C语言试题三十五之找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
  5. Android之Bitmap学习总结
  6. php基础教程 第三步 学习字符串及相关函数
  7. (上)python3 selenium3 从框架实现代码学习selenium让你事半功倍
  8. (附)python3 只需3小时带你轻松入门——python常用一般性术语或词语的简单解释
  9. 知道经纬度用python画路线图_神级程序员教你用Python如何画一个中国地图!(好好玩)...
  10. pythontemp_python 临时文件夹 的 tempfile模块学习