STL-vector-set_difference B - 人見人愛A-B

B - 人見人愛A-B

參加過上個月月賽的同窗必定還記得其中的一個最簡單的題目,就是{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 Inputios

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
 
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<vector>
 4 using namespace std;
 5 
 6 int n, m;
 7 int a[110], b[110];
 8 
 9 int main(){
10     while(~scanf("%d %d",&n, &m) &&(n||m)){//n和m不必定同時爲零 ,寫成 n && m就錯 
11         for(int i=0; i<n; i++)
12             scanf("%d",a+i);
13         for(int i=0; i<m; i++)
14             scanf("%d",b+i);
15         
16         sort(a, a+n);
17         sort(b, b+m);
18         
19         vector<int>v(110);
20         vector<int>::iterator it;
21         it = set_difference(a, a+n, b, b+m, v.begin());//set_difference()算法計算兩個集合[start1, end1)和[start2, end2)的差集, 並將差集存放到result.
22         v.resize(it-v.begin());//resize()    改變實際元素的個數。
23         
24         if(v.size()==0)
25             printf("NULL\n");
26         else{
27             for(it=v.begin(); it!=v.end(); ++it)
28                 printf("%d ",*(it));
29             printf("\n");
30         }
31     }
32     return 0;
33 }
(1)輸入n和m處,注意n和m是不必定同時爲零的,有可能單個爲零

(2)set end1)和[start2, end2)的差集, 並將差集存放到result.
(3)resize() 改變實際元素的個數。
相關文章
相關標籤/搜索