pta集合相似度

2021-10-08 23:37:16 字數 2228 閱讀 1012

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

輸入格式:

輸入第一行給出乙個正整數n(≤50),是集合的個數。隨後n行,每行對應乙個集合。每個集合首先給出乙個正整數m(≤10000),是集合中元素的個數;然後跟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%

一開始打算用c寫結果弄了半天,最後乙個點仍然超時……

感覺是查詢相同數字的巢狀迴圈太耗時間了。

#include

#include

float

same

(int a,

int b,

int lena,

int lenb)

;//找出相同的數返回相同數的個數

intmain

(void)}

}if(mark ==0)

else

} space[i]=(

int*

)realloc

(space[i]

,len[i]

*sizeof

(int))

;}scanf

("%d"

,&m)

; request =

(int**

)malloc

(m*sizeof

(int*)

);for(i =

0; i < m; i++

)for

(i =

0; i < m; i++

)return0;

}float

same

(int a,

int b,

int lena,

int lenb)}}

return z;

}

後來放棄了用c……改用python來寫結果不到20行完美通過…………

n =

input

() # 輸入集合個數

lists =

# 集合列表

for i in

range

(int

(n))

: temper =

input

() # 輸入n個集合

lists.

(set

(list

(temper.

split()

)[1:

])) # 將n個集合加入集合列表

m =input()

list1 =

# 要計算的集合組

for i in

range

(int

(m))

: temper =

input()

list1.

(temper.

split()

)for i in

range

(int

(m))

: k =

len(lists[

int(list1[i][0

])-1

]& lists[

int(list1[i][1

])-1

])z =

len(lists[

int(list1[i][0

])-1

]| lists[

int(list1[i][1

])-1

])print

(str

(format

(float

(k)/

float

(z)*

100,

'.2f'))

+"%"

)

最後一句人生苦短我用python!

pta 集合相似度 stl

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

STL find函式 集合相似度(PTA)

include 使用格式 find 陣列的頭位址,陣列的尾位址,要找的數 或者陣列.find 要找的數 find nums.begin nums.end target vector int nums find nums,nums 5,2 返回2的位址,若find 8,則返回第乙個8的位址 或者num...

集合相似度

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