PAT_1063. Set Similarity(1个case超时)

来源:互联网 发布:爱站seo查询 编辑:程序博客网 时间:2024/06/07 02:47

时隔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;}


原创粉丝点击