GPLT L2-005. 集合相似度【set集合】

題目:集合相似度

題意:Nc:“兩個集合都有的不相等整數的個數” 意思是求倆個集合的交集個數  Nt:“兩個集合一共有的不相等整數的個數” 意思是求倆個集合的並集個數 ,記得去重!

思路:開一個set集合數組,分別將每個集合加入相應的集合中,然後再將要求的集合中查找相同元素即爲Nc ,而Nt爲集合的長度,當前set集合加入重複元素的話不增長總元素個數,而只是在重複元素加了個count的值爲1,這樣就充分的利用了set集合求交集與並集,無需手動的去重了!

參考:寒leng的鋒博客

代碼:

#include <iostream>
#include <cstdio>
#include <set>
#include<map>
using namespace std;
const int maxn = 55;
set<int>st[maxn];
int main()
{
    int n,m,k,x,y,tigital;
    while(~scanf("%d",&n)){
        for(int i=1;i<=n;i++){
            scanf("%d",&m);
            for(int j=0;j<m;j++){ scanf("%d",&tigital); st[i].insert(tigital);}
        }
        scanf("%d",&k);
        while(k--){
            scanf("%d%d",&x,&y);
            int c=0,t = st[x].size() + st[y].size();
            for(set<int>::iterator it=st[x].begin();it != st[x].end();it++){
                if(st[y].count(*it)) c++;
            }
            printf("%.2lf%%\n",(double)c/(double)(t-c) *100.0);
        }
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章