這裏面仍是用到了set去重,仍是要多掌握stl的用法;
這裏注意一個巧妙地處理;
因爲咱們尋找的時兩個集合a,b的不重複元素,和重複元素;
首先記錄b的集合元素,在b中挨個尋找a的元素;
若是在b中沒有找到,則說明是不重複元素,找到了說明時重複元素,因此分開記錄c++
#include<stdio.h> #include<stdlib.h> #include<set> #include<vector> using namespace std; using std::vector; using std::set; int main(){ int n,m,k,temp,a,b; scanf("%d",&n); vector<set<int> > v(n); for(int i=0;i<n;i++){ scanf("%d",&m); set<int>s; for(int j=0;j<m;j++){ scanf("%d",&temp); s.insert(temp); } v[i]=s; } scanf("%d",&k); for(int i=0;i<k;i++){ scanf("%d %d",&a,&b); int nc=0,nt=v[b-1].size(); for(set<int>::iterator it=v[a-1].begin();it!=v[a-1].end();it++){ if(v[b-1].find(*it)==v[b-1].end()){ //若是在b中沒有找到a的元素 nt++; }else{ nc++; } } double ans=(double)nc/nt*100; printf("%.1f%%\n",ans); } system("pause"); return 0; }