問題の説明
二つの整数A、Bを考えると、その交差点、労働組合、およびAのI Bセットを決定
入力フォーマット
最初の行動は、整数N、Aは、セット内の要素の数を表します。
N個の互いに異なる整数の第2行は、スペースで区切られた、要素Aは、コレクションを表します。
3番目の列、整数mは、Bは、セット内の要素の数を表します。
4行目は、互いに異なるm個のスペースで区切られた要素Bを表す整数値がセットされています。
コレクションのすべての要素は、範囲INT <= 1000内の整数であり、n、mは。
出力フォーマット
すべての要素の交点の出力A、Bの昇順で、最初の行の。
小から大へ、すべての要素Bのために、第2出力線、濃縮しました。
A I Bのすべての要素の3行目の出力は昇順に設定しました。
サンプル入力
。5
1 2 3 4 5
。5
2. 8 6 10 4
の出力例
2 4
1 2 3 4 10 5 6 8
。1. 3. 5
サンプル入力
。4
1 2 3 4
3
5 6 7
サンプル出力
1234 6. 7. 5
。1 4 3 2
問題解決のアイデア:
方法の一つ:達成するために、ルックアップ機能の整然としたセットでSTLを使用して
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
using namespace std;
int A[1000] = {0};
int B[1000] = {0};
set<int> a;
set<int> b;
vector<int> inter;
set<int> unio;
vector<int> resi;
int main(){
int m, n;
cin >> m;
for(int i = 0; i < m; i++){
cin >> A[i];
a.insert(A[i]);
}
cin >> n;
for(int i = 0; i < n; i++){
cin >> B[i];
b.insert(B[i]);
}
//交集
set<int>::iterator it;
for(it = a.begin(); it!=a.end(); it++){
if(b.find(*it) != b.end()) inter.push_back(*it);
}
//并集
for(it = a.begin(); it!=a.end(); it++){
unio.insert(*it);
}
for(it = b.begin(); it!=b.end(); it++){
unio.insert(*it);
}
//余集
for(it = a.begin(); it!=a.end(); it++){
if(b.find(*it) == b.end()) resi.push_back(*it);
}
//打印
for(int i = 0; i < inter.size(); i++){
cout << inter[i] << " ";
}
cout << endl;
for(it = unio.begin(); it != unio.end(); it++){
cout << *it << " ";
}
cout << endl;
for(int i = 0; i < resi.size(); i++){
cout << resi[i] << " ";
}
cout << endl;
return 0;
}
方法2:内蔵の解決機能を使います
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
using namespace std;
vector<int> a;
vector<int> b;
vector<int> c;
void Print(vector<int> &c){
for(int i=0;i<c.size();i++){
cout<<c[i]<<" ";
}
c.clear();
cout<<endl;
}
int main(){
int m, n, temp;
cin >> m;
for(int i = 0; i < m; i++){
cin >> temp;
a.push_back(temp);
}
sort(a.begin(),a.end());
cin >> n;
for(int i = 0; i < n; i++){
cin >> temp;
b.push_back(temp);
}
sort(b.begin(),b.end());
set_intersection(a.begin(),a.end(),b.begin(),b.end(),back_inserter(c));
Print(c);
set_union(a.begin(),a.end(),b.begin(),b.end(),back_inserter(c));
Print(c);
set_difference(a.begin(),a.end(),b.begin(),b.end(),back_inserter(c));
Print(c);
}