insert为插入。set_intersection求交集,set_union求并集,是属于algorithm里的函数。
例题有 PAT甲级1063
#include<iostream> #include<cstring> #include<cstdio> #include<set> #include<algorithm> using namespace std; int main() { int n,m; scanf("%d",&n); set<int> si[n]; for(int i=0;i<n;++i) { scanf("%d",&m); for(int j=0;j<m;++j) { int temp; scanf("%d",&temp); si[i].insert(temp); } } int k; scanf("%d",&k); for(int i=0;i<k;++i) { int s,e; set<int> ss,st; scanf("%d%d",&s,&e); --s,--e; //交集 set_intersection(si[s].begin(),si[s].end(),si[e].begin(),si[e].end(), inserter(ss,ss.begin())); //并集 /*set_union(si[s].begin(),si[s].end(),si[e].begin(),si[e].end(), inserter(st,st.begin())); */ int same = ss.size(); int total = si[s].size()+si[e].size()-same;//st.size(); if(total==0) printf("0.0%%\n"); else printf("%.1lf%%\n",100.0*same/total); } return 0; }
当然PAT甲级1063还有另一种解法,在我的PAT甲级考前整理中提及,以下是链接: