給定兩個整數集合,它們的相似度定義為:nc /nt×100%。其中nc是兩個集合都有的不相等整數的個數,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...