杭电OJ -- 2034 人见人爱A-B(c++练手的好题目)
2015-10-04 11:39
295 查看
人见人爱A-B
Problem Description参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法运算。(当然,大家都知道集合的定义,就是同一个集合中不会有两个相同的元素,这里还是提醒大家一下)
呵呵,很简单吧?
Input
每组输入数据占1行,每行数据的开始是2个整数n(0<=n<=100)和m(0<=m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间有一个空格隔开.
如果n=0并且m=0表示输入的结束,不做处理。
Output
针对每组数据输出一行数据,表示A-B的结果,如果结果为空集合,则输出“NULL”,否则从小到大输出结果,为了简化问题,每个元素后面跟一个空格.
Sample Input
3 3 1 2 3 1 4 7
3 7 2 5 8 2 3 4 5 6 7 8
0 0
Sample Output
2 3
NULL
不带什么含金量,纯练手的题目,做ACM的同学,并且使用C++的,真的要好好去看一看<c++标准函数库>和<stl源码剖析>这两本书,看完之后你才知道c++有多么宏伟,对了,不要重复造轮子,这道题目在stl库里面有函数可以直接用,效率什么的,至少比你自己写的要高,所谓的'在sgi stl源码面前,%99的程序员的代码都是三流水平'这句话不是白说的。话就说道这里,自己看着办吧!
网上的那些代码有些真的很幼稚,输入的数据没有顺序,要排序,为什么不直接用set呢?插入的时候就已经排好序了呀。用的是红黑树,自行去补stl源码分析。
#include <iostream> #include <vector> #include <set> #include <iterator> #include <algorithm> using namespace std; void output(set<int> &v) { set<int>::iterator it = v.begin(); for (; it != v.end(); ++it) { cout << *it << " "; } } int main() { set<int> n_elem, m_elem, o_elem; int n, m; while(cin >> n >> m && !(n == 0 && m == 0)) { //copy_n(istream_iterator<int>(cin), n, inserter(n_elem, n_elem.end())); //copy_n(istream_iterator<int>(cin), m, inserter(m_elem, m_elem.end())); int val; for (int i = 0; i < n; ++i) { cin >> val; n_elem.insert(val); } for (int i = 0; i < m; ++i) { cin >> val; m_elem.insert(val); } set_difference(n_elem.begin(), n_elem.end(), m_elem.begin(), m_elem.end(), inserter(o_elem, o_elem.end())); if (o_elem.size() == 0) cout << "NULL"; else { //output(o_elem); copy(o_elem.begin(), o_elem.end(), ostream_iterator<int>(cout, " ")); } cout << endl; n_elem.clear(); m_elem.clear(); o_elem.clear(); } return 0; }
相关文章推荐
- 程序设计基石与实践系列之C语言程序员必读的5本书
- 程序设计基石与实践系列之成为一名Top的C语言程序员
- 三种工厂模式的C++实现
- C++中friend的使用(friend function and friend class)
- 12.OC语言基础知识
- 11.OC语言前期准备
- 10.C语言指针
- 09.C语言字符串
- c++原型模式
- c++建造者模式
- c++ primer 学习之路 指针的引用
- C/C++static、const详解
- C/C++ 内存对齐原则及作用
- 杭电OJ -- 2033 人见人爱A+B(c++练手的好题目)
- C++设计模式——单例模式
- Windows 8 64bit + VS2013/Dev C++/CodeBlocks 调用 GSL1.8 (通过GnuWin32)
- loadrunner11安装出现Microsoft Visual c++2005 sp1安装失败
- C++空类的大小
- 根据基类指针判断指针指向的子类
- 【站在巨人的肩膀上】值得推荐的C/C++框架和库