首页 > ACM题库 > HDU-杭电 > HDU 1412 {A} + {B}[解题报告] C++
2013
12-09

HDU 1412 {A} + {B}[解题报告] C++

{A} + {B}

问题描述 :

给你两个集合,要求{A} + {B}.
注:同一个集合中不会有两个相同的元素.

输入:

每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.

输出:

针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.

样例输入:

1 2
1
2 3
1 2
1
1 2

样例输出:

1 2 3
1 2


#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

const int N = 10010;
int main()
{
    long arr1[2*N],arr2[N];
    int n,m;
    while(cin>>n>>m)
    {
        int k,j,i;
        for(i=0; i<n; i++)
            cin>>arr1[i];
        for(i=0; i<m; i++)
            cin>>arr2[i];
        for(i=0,k=n; i<m; i++)
        {
            bool flag = true;
            for(j=0; j<k; j++)
                if(arr1[j]==arr2[i])
                    flag = false;
            if(flag) arr1[k++] = arr2[i]; 
        }
        sort(arr1,arr1+k);
        for(i=0; i<k; i++)
        {
            cout<<arr1[i];
            if(i!=k-1) 
                cout<<" ";
        }
        cout<<endl;
    }
    return 0;
}

解题报告转自:http://blog.csdn.net/oinux/article/details/7384057


  1. 如果两个序列的最后字符不匹配(即X [M-1]!= Y [N-1])
    L(X [0 .. M-1],Y [0 .. N-1])= MAX(L(X [0 .. M-2],Y [0 .. N-1]),L(X [0 .. M-1],Y [0 .. N-1])
    这里写错了吧。

  2. 我还有个问题想请教一下,就是感觉对于新手来说,递归理解起来有些困难,不知有没有什么好的方法或者什么好的建议?