#include<cstdio>
#include<set>
using namespace std;
const int MAXN = 51;
set<int> ST[MAXN]; //MAXN个集合
void compare(int x, int y){ //比较集合 ST[x] 和 ST[y]
int DiffNumber = ST[y].size(), SameNumber = 0; //不同数的个数,相同数的个数
//遍历集合 ST[x]
for(set<int>::iterator it = ST[x].begin(); it != ST[x].end(); it++){
if(ST[y].find(*it) != ST[y].end()) //在 ST[y] 中能找到该元素
SameNumber++;
else //在 ST[y] 中不能找到该元素
DiffNumber++;
}
printf("%.1f%%\n", SameNumber * 100.0 / DiffNumber);
}
int main(){
int N, K, IntegerNumber, Number, ST1, ST2;
scanf("%d", &N); //集合个数
//因为集合次序为1,2,3,4,...N,所以不能从0开始
for(int i = 1; i <= N; i++){
scanf("%d", &IntegerNumber); //集合 i 中的元素个数,
for(int j = 0; j < IntegerNumber; j++){ //此循环执行 IntegerNumber 次即可
scanf("%d", &Number); //集合 i 中的元素 Number
ST[i].insert(Number); //将元素 Number 加入集合 ST[i] 中
}
}
scanf("%d", &K); // K 个查询
for(int i = 0; i < K; i++){
scanf("%d%d", &ST1, &ST2); //需要对比的两个集合编号
compare(ST1, ST2); //比较两个集合
}
return 0;
}
原文地址:https://www.cnblogs.com/zjsaipplp/p/10425226.html
时间: 2024-11-03 12:48:00