团体程序设计天梯赛-练习集 L2-005 集合相似度 STL set集合的交和并
来源:互联网 发布:项目与大数据的关联性 编辑:程序博客网 时间:2024/06/04 08:52
L2-005. 集合相似度
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
给定两个整数集合,它们的相似度定义为:Nc/Nt*100%。其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。
输入格式:
输入第一行给出一个正整数N(<=50),是集合的个数。随后N行,每行对应一个集合。每个集合首先给出一个正整数M(<=104),是集合中元素的个数;然后跟M个[0, 109]区间内的整数。
之后一行给出一个正整数K(<=2000),随后K行,每行对应一对需要计算相似度的集合的编号(集合从1到N编号)。数字间以空格分隔。
输出格式:
对每一对需要计算的集合,在一行中输出它们的相似度,为保留小数点后2位的百分比数字。
输入样例:33 99 87 1014 87 101 5 877 99 101 18 5 135 18 9921 21 3输出样例:
50.00%33.33%
错误代码,最后一个测试点超时,前几个测试点一直错,后来发现比如map<int> a
在判断if(a[i]) {......}时,如果i不在map里面,那么map会创建一个<i,0>键值对,然后这个<i,0>键值对会一直保留下去,不管以后用不用的到它,因此在
if(a[i]){......}之后要遍历map的时候要格外小心,要判断下<i,0>后者是否为零
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <set>#include <map>using namespace std;const int maxn = 50;map<int, int> m[maxn + 10];int main(){ int N, M, K, tn; scanf("%d", &N); for (int t = 1; t <= N; t++) { scanf("%d", &M); for (int i = 0; i < M; i++) { scanf("%d", &tn); m[t][tn]++; } } scanf("%d", &K); int di, fen; for (int i = 0; i < K; i++) { int x, y; scanf("%d%d", &x, &y); map<int, int> tm; for (map<int, int>::iterator j = m[x].begin(); j != m[x].end(); j++) { if (j->second) //debug tm[j->first]++; } for (map<int, int>::iterator j = m[y].begin(); j != m[y].end(); j++) { if (j->second) tm[j->first]++; } di = tm.size(); fen = 0; for (map<int, int>::iterator j = m[x].begin(); j != m[x].end(); j++) { if (j->second) { if (m[y][j->first] != 0) fen++; //debug } } printf("%.2f%%\n", 100.0 * fen / di); } return 0;}
使用algorithm中的set_intersection 函数和iterator中的inserter函数
#include <cstdio>#include <iostream>#include <algorithm>#include <iterator>#include <set>using namespace std;const int maxn = 50;int main(){int N, M, K;scanf("%d", &N);set<int> s[maxn + 10];for (int t = 1; t <= N; t++) {scanf("%d", &M);for (int m = 0; m < M; m++) {int x;scanf("%d", &x);s[t].insert(x);}}scanf("%d", &K);for (int k = 1; k <= K; k++) {int x, y, Nc, Nt;scanf("%d%d", &x, &y);set<int> res;set_intersection(s[x].begin(), s[x].end(), s[y].begin(), s[y].end(), inserter(res, res.begin()));Nt = s[x].size() + s[y].size() - res.size();Nc = res.size();printf("%.2f%%\n", 100.0 * Nc / Nt);}return 0;}
0 0
- 团体程序设计天梯赛-练习集 L2-005 集合相似度 STL set集合的交和并
- 团体程序设计天梯赛L2-005 集合相似度
- 团体程序设计天梯赛L2-005 集合相似度(STL)
- 团体程序设计天梯赛-练习集 L2-005. 集合相似度
- 团体程序设计天梯赛-练习集 L2-005. 集合相似度
- 团体程序设计天梯赛-练习集L2-005. 集合相似度
- 团体程序设计天梯赛-练习集 L2-005. 集合相似度 解题报告
- L2-005. 集合相似度-PAT团体程序设计天梯赛GPLT
- 团体程序设计天梯赛-练习集 L2-005
- 团体程序设计天梯赛-练习集 L2-3. 月饼 贪心
- 团体程序设计天梯赛-练习集 L2-002
- 团体程序设计天梯赛-练习集 L2-007 家庭房产
- 团体程序设计天梯赛-练习集 L2-002. 链表去重
- 团体程序设计天梯赛-练习集 L2-003. 月饼LOVE
- 团体程序设计天梯赛-练习集 L2-007. 家庭房产
- 团体程序设计天梯赛-练习集 L2-009. 抢红包
- 团体程序设计天梯赛-练习集 L2-010. 排座位
- 团体程序设计天梯赛-练习集 L2-001. 紧急救援
- 数据库索引
- 人生赞歌
- 2016年5月可用的KMS服务器
- mybatis中的标签
- poj1051 细心模拟
- 团体程序设计天梯赛-练习集 L2-005 集合相似度 STL set集合的交和并
- HZAU 1019 Arithmetic Sequence [DP]
- MySQL数据检索+查询+全文本搜索
- ANDROID STUDIO集成GENYMOTION模拟器
- vimtutor中文版
- JFrame中设置背景图片
- 远程摄像头软件mjpg-streamer使用指南
- leetcode.162. Find Peak Element
- 开灯问题