L2 005 集合相似度

2021-08-21 19:53:51 字數 1573 閱讀 8358

l2-005 集合相似度

給定兩個整數集合,它們的相似度定義為:n~c~/n~t~*100%。其中n~c~是兩個集合都有的不相等整數的個數,n~t~是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。

輸入格式:

輸入第一行給出乙個正整數n(<=50),是集合的個數。隨後n行,每行對應乙個集合。每個集合首先給出乙個正整數m(<=10^4^),是集合中元素的個數;然後跟m個[0, 10^9^]區間內的整數。

之後一行給出乙個正整數k(<=2000),隨後k行,每行對應一對需要計算相似度的集合的編號(集合從1到n編號)。數字間以空格分隔。

輸出格式:

對每一對需要計算的集合,在一行中輸出它們的相似度,為保留小數點後2位的百分比數字。

輸入樣例:

3 3 99 87 101

4 87 101 5 87

7 99 101 18 5 135 18 99

2 1 2

1 3

輸出樣例:

50.00%

33.33%

解題思路:

1.首先用set比較方便,因為每乙個集合自身也會有重複,用set去重。

2.分子為相同,分母為總的不同。分母只要把去重後的兩個集合的size相加,而分子我的想法是設定乙個temp集合,醬兩個集合合併,這樣就把集合重複的去掉了,用分母-temp.size就是重複的個數,但是不知為何,最後一組資料超時。最後還是用了晴神書上的方法,在另乙個幾何中查詢,計算same和dif個數。

#include

#include

#include

using

namespace

std;

const

int maxn=100;

sets[maxn],temp;

int main()

}scanf("%d",&k);

for(int i=0;iint a1,a2,up,down;

scanf("%d%d",&a1,&a2);

int same=0,dif=s[a2].size() ;

set::iterator it;

for(it=s[a1].begin() ;it!=s[a1].end() ;it++)

printf("%.2f%\n",(double)100.0*same/dif) ;

/*這個方法,最後乙個點超時

for(it=s[a1].begin() ;it!=s[a1].end() ;it++)

temp.insert(*it) ;

for(it=s[a2].begin() ;it!=s[a2].end() ;it++)

temp.insert(*it) ;

up=s[a1].size() +s[a2].size() -temp.size() ;

printf("%.2f%\n",(double)100.0*up/temp.size() ) ;

temp.clear() ;*/

}return

0;}

L2 005 集合相似度

給定兩個整數集合,它們的相似度定義為 nc nt 100 其中nc是兩個集合都有的不相等整數的個數,nt是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。輸入格式 輸入第一行給出乙個正整數n 50 是集合的個數。隨後n行,每行對應乙個集合。每個集合首先給出乙個正整數m 1...

L2 005 集合相似度

給定兩個整數集合,它們的相似度定義為 nc nt 100 其中nc是兩個集合都有的不相等整數的個數,nt是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。輸入第一行給出乙個正整數n 50 是集合的個數。隨後n行,每行對應乙個集合。每個集合首先給出乙個正整數m 104 是集...

L2 005 集合相似度

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 給定兩個整數集合,它們的相似度定義為 nc nt 100 其中nc是兩個集合都有的不相等整數的個數,nt是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。...