输入两个集合,分别求其交集和并集中元素的个数,每个集合中可能存在相同的元素,而最终的交集和并集中应该不存在。
例如:
输入:
4 5
3 4 7 3
4 6 3 2 6
输出:
2 5
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <ctime>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <deque>
using namespace std;
typedef long long int LL;
const int MAX = 1e4+10, INF = (1<<30)-1;
int N, M, X;
set<int> A, B;
int main()
{
scanf("%d %d", &N, &M);
for(int i=0; i<N; i++)
{
scanf("%d", &X);
A.insert(X);
}
for(int i=0; i<M; i++)
{
scanf("%d", &X);
B.insert(X);
}
set<int>::iterator itA = A.begin();
set<int>::iterator itB = B.begin();
int cnt = 0;//交集元素个数
while(itA != A.end() && itB != B.end())
{
if(*itA == *itB) itA++, itB++, cnt++;
else if(*itA < *itB) itA++;
else if(*itA > *itB) itB++;
}
printf("%d %d\n", cnt, A.size()+B.size()-cnt);
return 0;
}
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue>
#include <stack>
#include <set>
using namespace std;
set<int> A, B;
int main()
{
int N, M, x, cnt = 0;
scanf("%d %d", &N, &M);
for(int i = 0; i < N; i++)
{
scanf("%d", &x);
A.insert(x);
B.insert(x);
}
for(int i = 0; i < M; i++)
{
scanf("%d", &x);
if(A.find(x) != A.end()) cnt++;
B.insert(x);
}
printf("%d %d\n", cnt, B.size());
system("pause");
return 0;
}