问题 E: 交集

前言必读!http://blog.csdn.net/hnust_v/article/details/51747743
问题 E: 交集

题目描述

有两个相等长度的正整数序列A和B,都是有序的(递增排序),同时一个序列中没有重复元素,现在需要求这两个序列的交――序列C,同时打印输出。
输入

每个测试用例一共有2*n+1行,第一行输入为数列的长度n,然后下面2~n+1行,依次输入序列A中的数。n+2~2*n+1行,依次输入序列B中的数。
其中 1 <= n <= 50000 , 序列中每个数大小不会超过1000000。当程序输入n为0时表示结束。
输出

每个测试用例输出一行,先输出序列C的长度,然后依次输出C中的整数,两个数之间间隔一个空格。注意行末不要出现空格。C中的整数递增排序。
样例输入

5 1 2 5 6 7 1 2 4 6 9 0
样例输出

3 1 2 6
提示

来源: http://acm.hnust.edu.cn/JudgeOnline/problem.php?cid=1211&pid=4

/*这里我使用了STL set  但是如果不会使用也可以先读入数组A,读入数组B时进行指标游动的方式对比,时间复杂度仅为O(n)并且同样易实现*/

#include 
using namespace std;
int A[50500]={};
int main()
{
  // freopen("E:\\test.txt","r",stdin);
    //freopen("E:\\tsst.txt","w",stdout);
    int n;
    while(cin>>n&&n)
    {
        int Count=0;
        set<int> S;
        for(int i=1,a;i<=n;i++)
        {
            scanf("%d",&a);
            S.insert(a);
        }
        for(int i=1,a;i<=n;i++)
        {
            scanf("%d",&a);
            if(S.find(a)!=S.end()) A[++Count]=a;
        }
        if(!Count) printf("0\n");
        else
        {
            printf("%d ",Count);
            for(int i=1;i<=Count;i++) printf("%d%c",A[i],i==Count?'\n':' ');
        }

    }
    return 0;
}

你可能感兴趣的:(数据结构课程设计)