本文共 1428 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要计算两个集合之间的相似度。集合相似度通常是指两个集合中元素的重叠程度,或者说它们的交集占总元素数的比例。我们可以使用C++来实现这一点。
#include#include #include #include using namespace std;int main() { istringstream iss(input_data); vector > sets; // 读取集合数量N int N; iss >> N; for (int i = 0; i < N; ++i) { // 读取当前集合的元素数目K int K; iss >> K; unordered_set current_set; for (int j = 0; j < K; ++j) { int num; iss >> num; current_set.insert(num); } sets.push_back(current_set); } // 读取查询次数M int M; iss >> M; for (int m = 0; m < M; ++m) { int pos1, pos2; iss >> pos1 >> pos2; unordered_set & s1 = sets[pos1]; unordered_set & s2 = sets[pos2]; // 计算交集元素个数 unordered_set intersection; for (int num : s1) { if (s2.count(num)) { intersection.insert(num); } } int same = intersection.size(); int total = s1.size() + s2.size() - same; double similarity = (same * 100.0) / total; printf("%.2lf%%\n", similarity); } return 0;}
istringstream
读取输入数据,逐个处理每个集合的元素。unordered_set
去重存储每个集合的元素。这个方法确保了我们能够高效且准确地计算集合之间的相似度。
转载地址:http://ieipz.baihongyu.com/