时隔3个月,重新回来开始做题,9月份要考PAT甲级.希望能有个好成绩咯
看了网上的题解,学习到求集合的交集和并集的方法,用stl中的set来解决问题.
这道题由于题目中某一个集合会出现重复的数字,但是用set中的insert插入时,重复的数字只插入一次,所以很好地避免了重复数字的计算问题.
// // main.cpp // PAT_1063. Set Similarity // // Created by wjq on 17/5/18. // Copyright © 2017年 wjq. All rights reserved. // #include <iostream> #include <map> #include <set> using namespace std; int N,M,temp,quries,a,b; set<int> s[55]; set<int>::iterator it1,it2; double calculate() { int common=0,all=0; for(it1=s[a-1].begin(),it2=s[b-1].begin();it1!=s[a-1].end()&&it2!=s[b-1].end();) { if(*it1==*it2) { it1++; it2++; common++; } else if(*it1<*it2) it1++; else it2++; } all = (int)s[a-1].size()+(int)s[b-1].size()-common; return (double)common/(double)all * 100; } int main(int argc, const char * argv[]) { scanf("%d",&N); for(int i=0;i<N;i++) { scanf("%d",&M); for(int j=0;j<M;j++) { scanf("%d",&temp); s[i].insert(temp); } } scanf("%d",&quries); for(int i=0;i<quries;i++) { scanf("%d%d",&a,&b); printf("%.1lf%%\n",calculate()); } return 0; }
PAT_1063. Set Similarity(1个case超时)
最新推荐文章于 2021-12-18 09:22:46 发布