1063. Set Similarity 解析

来源:互联网 发布:ubuntu 14 搜狗输入法 编辑:程序博客网 时间:2024/04/27 06:19

参考了 http://blog.csdn.net/u014646950/article/details/47608823 的做法

刚开始做的时候最后一个测试点总是超时。

应该直接把重复的都去除掉,用set自带的查找去完成(效率高),没找到会返回结尾来判定是否找到。

#include <iostream>#include <algorithm>#include <cstring>#include <climits>#include <string>#include <map>#include <stack>#include <queue>#include <set>#define MAX 100010using namespace std;map <int,int> num2no;set <int> list[2018];int n ,k;int main(){int no = 1;scanf("%d",&n);for(int i = 1;i <= n ;i++){int m,v;scanf("%d",&m);for(int j = 0 ;j<m;j++){scanf("%d",&v);list[i].insert(v);}}scanf("%d",&k);for(int i =0 ;i < k ;i++){int l1,l2,same = 0;scanf("%d%d",&l1,&l2);set <int> ::iterator it;for(it = list[l1].begin() ;it!=list[l1].end();it++){if(list[l2].find(*it) != list[l2].end())same++;}float rate = float(same) / float(list[l1].size()+list[l2].size()-same) * 100;printf("%.1f%%\n",rate);}return 0;}


原创粉丝点击