这里面还是用到了set去重,还是要多掌握stl的用法;这里注意一个巧妙地处理;由于我们寻找的时两个集合a,b的不重复元素,和重复元素;首先记录b的集合元素,在b中挨个寻找a的元素;如果在b中没有找到,则说明是不重复元素,找到了说明时重复元素,所以分开记录#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/nt100; printf("%.1f%%\n",ans); } system(“pause”); return 0;}