第一次的想法是把要比较的两个set合并成一个set,然后原来set的两个长度-合并的set长度就是公共的长度,然而最后一个测试点过不去,后来就根据set是从小到大排序的规律进行一个个遍历比较,这要就通过了
#include<iostream>#include<set>#include<vector>#PRagma warning(disable:4996)using namespace std;vector<set<int>> rr;//存储输入int main(){ int N; cin >> N; rr.resize(N); for (int t = 0;t < N;t++) { int temp; scanf("%d", &temp); while (temp--) { int temp2; scanf("%d", &temp2); rr[t].insert(temp2); } } cin >> N; while (N--) { int l, r; scanf("%d %d", &l, &r); l--;r--; int x = rr[l].size(), y = rr[r].size(); int cnt = 0; set<int>::iterator it1=rr[l].begin(), it2=rr[r].begin(); while (it1 != rr[l].end() && it2 != rr[r].end())//计算公共元素的个数 { if (*it1 > *it2) it2++; else if (*it1 < *it2) it1++; else { cnt++; it1++;it2++; } } printf("%.1f%%/n", 100.0*cnt /(x+y-cnt)); }}新闻热点
疑难解答