标签:clu 用法 转义 有序 cst section freopen span 文件
题意:求两个集合的相似性。
思路:考察set。会用set题目就很简单。不过这里要拓展一下,求交集求并集的函数。见最后。
代码:
#include <cstdio> #include <vector> #include <set> #include <algorithm> using namespace std; int main() { freopen("pat.txt","r",stdin); int n,m,val; scanf("%d",&n); vector<set<int>> st(n+1); for(int i=1;i<=n;i++){ scanf("%d",&m); while(m--){ scanf("%d",&val); st[i].insert(val); } } int q,u,v; scanf("%d",&q); while(q--){ scanf("%d%d",&u,&v); set<int> set_u=st[u]; set<int> set_v=st[v]; int nc=0; for(auto i:set_u) if(set_v.find(i)!=set_v.end()) nc++; double rate=100*(double)nc/(set_u.size()+set_v.size()-nc); printf("%.1f\%\n",rate);//输出%要加个转义字符"\" } return 0; }
#include <cstdio> #include <vector> #include <set> #include <algorithm> using namespace std; int main() { set<int> a={1,2,3}; set<int> b={3,4,1}; set<int> jiaoji,bingji;//蜜汁命名~ set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(jiaoji,jiaoji.begin()));//注意最后一个参数的写法 for(auto i:jiaoji) printf("%d ",i);//输出1 3 printf("\n"); set_union(a.begin(),a.end(),b.begin(),b.end(),inserter(bingji,bingji.begin())); for(auto i:bingji) printf("%d ",i);//输出1 2 3 4 printf("\n"); vector<int> u={1,3,2,4}; vector<int> v={4,2,3,5}; vector<int> vecJiao,vecBing; //要先确保容器里元素是有序的,还必须是升序的,若不是有序的或升序的,程序也能运行,但结果不是如我们想的那样的! sort(u.begin(),u.end()); sort(v.begin(),v.end()); set_intersection(u.begin(),u.end(),v.begin(),v.end(),inserter(vecJiao,vecJiao.begin())); for(auto i:vecJiao) printf("%d ",i);//输出2 3 4 printf("\n"); set_union(u.begin(),u.end(),v.begin(),v.end(),inserter(vecBing,vecBing.begin())); for(auto i:vecBing) printf("%d ",i);//输出1 2 3 4 5 printf("\n"); return 0; }
标签:clu 用法 转义 有序 cst section freopen span 文件
原文地址:https://www.cnblogs.com/kkmjy/p/9562631.html