这里面仍是用到了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; }