zoukankan      html  css  js  c++  java
  • ACM_求补集的交集

    求补集的交集

    Time Limit: 2000/1000ms (Java/Others)

    Problem Description:

    给定一个集合,然后再给出两个该集合的子集,求他们对应补集的交集。

    Input:

    输入包含多组测试数据,每组数据包含一个整数N(1<=N<=10^5),表示全集的大小(从1到N)接下来输入两个集合,每个集合先输入一个数m(1<=m<=N)表示子集的大小,然后有m个数,代表子集的元素

    Output:

    对于每组测试,如果对应补集的交集为空,输出NULL,否则输出交集。

    Sample Input:

    10
    3
    1 3 5
    4
    2 3 5 1
    2
    1
    1
    1
    2
    

    Sample Output:

    4 6 7 8 9 10
    NULL
    解题思路:水题!!!题目已经说明得很清楚了,如果两个集合的补集有交集,输出它们的交集部分,否则输出NULL。这里用一维数组来标记两个集合中的元素为假值,最后判断是真的就输出即可。水过。
    AC代码:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 bool a[100005];
     4 int main()
     5 {
     6     int n,m,x,g,k;bool flag;
     7     while(cin>>n){
     8         memset(a,true,sizeof(a));k=g=0;flag=false;
     9         for(int i=1;i<=2;++i){
    10             cin>>m;g=max(g,m);
    11             while(m--){cin>>x;a[x]=false;}
    12         }g=n-g;//补集长度为n-两个集合中长度最大的那个
    13         for(int i=1;i<=n;++i)
    14             if(a[i]){k++;flag=true;cout<<i<<(k<g?" ":"
    ");}
    15         if(!flag)cout<<"NULL"<<endl;
    16     }
    17     return 0;
    18 }
  • 相关阅读:
    Java 水仙花数
    Java 手机短号
    Java发工资
    VMware安装Linux CentOS7
    (转载)MongoDB的学习--explain()和hint()
    Linux基本操作练习题整理
    Linux的安装配置及常用命令(二)
    Linux的安装配置及常用命令(一)
    java中Json的使用
    Ajax
  • 原文地址:https://www.cnblogs.com/acgoto/p/9016935.html
Copyright © 2011-2022 走看看