PAT 基于词频的文件相似度 (set) -- 解题报告
来源:互联网 发布:自选股软件下载 编辑:程序博客网 时间:2024/06/05 14:40
解题思路
每个文件内的单词存放到单独的一个 set 中。询问时直接遍历其中一个 set(必须是 size 较小的那个,否则会超时在最后一个测试点),用 count() 查找另一个 set 中存不存在这个单词即可。做法类似 PAT 上另一道题目「集合相似度」(连示例输出都几乎是一样的)。
参考代码
#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include <string>using namespace std;int main(int argc, char const *argv[]) { int n, m, a, b; char s[2000], tmp[2000]; set<string> st[101]; scanf("%d%*c", &n); for(int i=1; i<=n; ++i) { while(gets(s)) { if(!strcmp(s, "#")) break; int last = 0; for(int j=0; s[j]; ++j) { if(s[j]>='A' && s[j]<='Z') s[j] += 32; // 分割单词,符合要求的存进 set if(s[j]<'a' || s[j]>'z') { s[j] = 0; strcpy(tmp, s+last); last = j+1; tmp[10] = 0; if(strlen(tmp) >= 3) st[i].insert(tmp); } } strcpy(tmp, s+last); tmp[10] = 0; if(strlen(tmp) >= 3) st[i].insert(tmp); } } scanf("%d", &m); while(m--) { scanf("%d %d", &a, &b); int cnt = 0; set<string>::iterator it; // !important: 遍历 size 较小的 set if(st[a].size() > st[b].size()) swap(a, b); for(it=st[a].begin(); it!=st[a].end(); ++it) { if(st[b].count(*it)) cnt++; } printf("%.1f%%\n", 100.0*cnt/(st[a].size()+st[b].size()-cnt)); } return 0;}
1 0
- PAT 基于词频的文件相似度 (set) -- 解题报告
- 5-44 基于词频的文件相似度 (30分)
- 《数据结构学习与实验指导》5-4:基于词频的文件相似度
- PAT (Advanced Level) 1063. Set Similarity (25) set的相似度
- pat L2-005. 集合相似度(set的简单应用)
- C++之STL中set的用法 PAT L2-005 集合相似度
- PAT解题报告索引
- PAT-1010解题报告
- PAT-1021解题报告
- PAT 解题报告
- pat解题报告【1076】
- pat解题报告【1073】
- pat解题报告【1078】
- pat解题报告【1082】
- pat解题报告【1074】
- PAT解题报告A1111
- PAT解题报告A1087
- 基于向量余弦的文件相似度计算
- OpenCV--霍夫线变换&霍夫圆变换
- inline,inline-block,block的区别
- pycharm
- PHP中include()与require()的区别
- Using astyle to format code
- PAT 基于词频的文件相似度 (set) -- 解题报告
- C语言文件处理
- swing 设置控件居中与设置文字格式
- Hibernate (八)一对一 (外键关联方式)
- day22 kafka 的集成
- java反射
- QC12864b LCD12864串行 PSB接线问题
- 虚机热迁移
- java推荐书籍