PAT A1063

分手后的思念是犯贱 2022-03-07 14:22 272阅读 0赞

clipboard.png
这里面还是用到了set去重,还是要多掌握stl的用法;
这里注意一个巧妙地处理;
由于我们寻找的时两个集合a,b的不重复元素,和重复元素;
首先记录b的集合元素,在b中挨个寻找a的元素;
如果在b中没有找到,则说明是不重复元素,找到了说明时重复元素,所以分开记录

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<set>
  4. #include<vector>
  5. using namespace std;
  6. using std::vector;
  7. using std::set;
  8. int main(){
  9. int n,m,k,temp,a,b;
  10. scanf("%d",&n);
  11. vector<set<int> > v(n);
  12. for(int i=0;i<n;i++){
  13. scanf("%d",&m);
  14. set<int>s;
  15. for(int j=0;j<m;j++){
  16. scanf("%d",&temp);
  17. s.insert(temp);
  18. }
  19. v[i]=s;
  20. }
  21. scanf("%d",&k);
  22. for(int i=0;i<k;i++){
  23. scanf("%d %d",&a,&b);
  24. int nc=0,nt=v[b-1].size();
  25. for(set<int>::iterator it=v[a-1].begin();it!=v[a-1].end();it++){
  26. if(v[b-1].find(*it)==v[b-1].end()){
  27. //如果在b中没有找到a的元素
  28. nt++;
  29. }else{
  30. nc++;
  31. }
  32. }
  33. double ans=(double)nc/nt*100;
  34. printf("%.1f%%\n",ans);
  35. }
  36. system("pause");
  37. return 0;
  38. }

发表评论

表情:
评论列表 (有 0 条评论,272人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PAT A1063

    ![clipboard.png][] 这里面还是用到了set去重,还是要多掌握stl的用法; 这里注意一个巧妙地处理; 由于我们寻找的时两个集合a,b的不重复元素,

    相关 PAT A1063

    ![clipboard.png][] 这里面还是用到了set去重,还是要多掌握stl的用法; 这里注意一个巧妙地处理; 由于我们寻找的时两个集合a,b的不重复元素,

    相关 PAT A1104

    ![clipboard.png][] 如果采用单纯的暴力枚举,会出现超时问题,可以跟绝递推来找出来规律; 代码如下: include<iostream>

    相关 PAT A1086

    ![clipboard.png][] 和刚刚之前的那道题类似,只不过多考察了一个四大遍历输出中的一个; 自己跟个智障一样检查了一个小时,结果发现少了一个返回指针,真是干

    相关 PAT A1121

    ![clipboard.png][] 水题,但是通过这一题需要改进一点; 对于hash赋初值的时候一定要谨慎一点,不要随便赋值0,视输入的数据而定; inclu

    相关 PAT A1029

    ![clipboard.png][] 起先自己想尝试性的直接排序找中位数,内存直接超限; 其实这道题可以采用归并排序的思路来做: 但是示例依旧白给。。。不过还是展现了

    相关 PAT A1043

    ![clipboard.png][] 简单的不用考虑平衡的二叉查询树; 我发现我有读题障碍症。。。 include<iostream> include