用vector二维存储
sort来对每个集合进行排序
nc 求两个集合交
nt 求两个集合并
#include<iostream> #include<stdio.h> #include<algorithm> #include<vector> #include<string.h> using namespace std; vector<vector<int> > vec; int main() { int n,m,k,i,x,j,y,nc,nt; scanf("%d",&n); for(i=0;i<n;i++) { vector<int >v; //vector<int>::iterator p=v.begin(); scanf("%d",&m); while(m--) { scanf("%d",&x); if(find(v.begin(),v.end(),x)==v.end())v.push_back(x);//去重复元素 } sort(v.begin(),v.end());
vec.push_back(v); } scanf("%d",&k); while(k--) { scanf("%d%d",&x,&y); x--,y--; nc=0; nt=vec[x].size()+vec[y].size(); for(i=0,j=0;i<vec[x].size()&&j<vec[y].size();) { if(vec[x][i]==vec[y][j]) { i++; j++; nt--; nc++; } else if(vec[x][i]>vec[y][j])j++; else i++; } printf("%.1lf%% ",nc*100.0/nt); } return 0; }