給定兩個整數集合,它們的相似度定義為:nc/nt×100%。其中nc是兩個集合都有的不相等整數的個數,nt是兩個集合一共有的不相等整數的個數。你的任務就是計算任意一對給定集合的相似度。
輸入格式:
輸入第一行給出乙個正整數n(≤50),是集合的個數。隨後n行,每行對應乙個集合。每個集合首先給出乙個正整數m(≤104),是集合中元素的個數;然後跟m個[0,109]區間內的整數。
之後一行給出乙個正整數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行,每行對應乙個集...