第一次的想法是把要比較的兩個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)); }}新聞熱點
疑難解答