給定兩個整數集合,它們的相似度定義為: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位的百分比數字。
輸入樣例:
33 99 87 101
4 87 101 5 87
7 99 101 18 5 135 18 99
21 2
1 3輸出樣例:
50.00%
33.33%
首先我想用乙個二維陣列儲存集合的數字,然後一系列操作發現,那樣申請二維陣列不僅會空間過大,而且只有一部分正確其他是段錯誤,參***後發現用set集合更好。
首先將所有集合放在set集合內,然後每次計算兩個集合的相似度,只需要遍歷乙個set集合,看是否與另外集合有重複元素,用count方法。兩集合所有元素個數減去重複的,就是相似度的分母。重複個數就是分子。
#include
using
namespace std;
intmain()
} cin>>mingling;
int x,y;
for(
int i=
0;ifenmu=s[x]
.size()
+s[y]
.size()
-fenzi;
if(i!=mingling-1)
printf
("%.2f%%\n"
,fenzi/fenmu*
100)
;else
printf
("%.2f%%"
,fenzi/fenmu*
100);}
}
L2 005 集合相似度 (25 分)
給定兩個整數集合,它們的相似度定義為 nc n t 100 其中n c是兩個集合都有的不相等整數的個數,n t是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。輸入格式 輸入第一行給出乙個正整數n 50 是集合的個數。隨後n行,每行對應乙個集合。每個集合首先給出乙個正整數...
L2 005 集合相似度 25 分
給定兩個整數集合,它們的相似度定義為 n c n t 100 其中n c是兩個集合都有的不相等整數的個數,n t是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。輸入第一行給出乙個正整數n 50 是集合的個數。隨後n行,每行對應乙個集合。每個集合首先給出乙個正整數m 10...
L2 005 集合相似度 25分
給定兩個整數集合,它們的相似度定義為 n c n t 100 其中n c 是兩個集合都有的不相等整數的個數,n t 是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。輸入格式 輸入第一行給出乙個正整數n 50 是集合的個數。隨後n行,每行對應乙個集合。每個集合首先給出乙個...