7 6 集合相似度 25分 排序)

2021-10-09 10:57:16 字數 1700 閱讀 8288

給定兩個整數集合,它們的相似度定義為: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%

這個題目的難點在於讀懂題目

nc:兩集合相等數的個數。

nt:兩集合一共有的不重複的數的個數。

下面兩種解法,第一種是用的while迴圈去重,第二種是stl中的set(集合)自動去重。

說白了就是第一種是自己想的,第二種是抄的。

原部落格第二種有些語句我不懂,先涼這裡,知道就回來補上。

#include

using

namespace std;

int a[55]

[2020];

intmain()

sort

(a[i]+1

,a[i]

+a[i][0

]+1)

;}scanf

("%d"

,&k)

;while

(k--

)else

if(a[x]

[i][j])

else

if(a[x]

[i]>a[y]

[j])}if

(i>a[x][0

])}else

} sum3=

(1.0

*100

*sum1)

/sum2;

printf

("%.2f%%\n"

,sum3);}

return0;

}

#include

#include

#include

#include

#include

using

namespace std;

intmain()

}int k;

scanf

("%d"

,&k)

;while

(k--

)int sum= st[a]

.size()

+st[b]

.size()

-cnt;

printf

("%.2f%%\n"

,cnt*

100.0

/sum);}

return0;

}

天梯賽 7 6 集合相似度 25分

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

5 6 集合相似度 25分

5 6 集合相似度 25分 給定兩個整數集合,它們的相似度定義為 n c n t times 100 n c n t 10 0 其中n cn c 是兩個集合都有的不相等整數的個數,n tn t 是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。輸入第一行給出乙個正整數n ...

7 9 集合相似度(25 分)

7 9 集合相似度 25 分 給定兩個整數集合,它們的相似度定義為 n c n t 10 0 其中n c 是兩個集合都有的不相等整數的個數,n t 是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。輸入第一行給出乙個正整數n 50 是集合的個數。隨後 n行,每行對應乙個集...