Welcome

首页 / 软件开发 / 数据结构与算法 / UVa 496 Simply Subsets (STL&set_intersection)

UVa 496 Simply Subsets (STL&set_intersection)2014-07-07 csdn博客 synapse7http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=437

先介绍<algorithm>头文件中与集合运算有关的4个函数:

很明显,这里要判断两个集合的关系,使用交集来判断就行了。

使用方法:

set_intersection(a, a + n, b, b + m, v.begin());
这里v是动态数组,用于保存交运算结果。(其他函数的使用方法均与之类似)

该函数的返回值减去v.begin()就是集合的大小。

完整代码:

01./*0.016s*/02.03.#include<bits/stdc++.h>04.using namespace std;05.06.int a[100], b[100];07.vector<int> v(100);///初始化空间是必须的08.09.int main()10.{11.int n, m, cnt, diff;12.char ch;13.while (~scanf("%d%c", &a[0], &ch))14.{15.for (n = 1; ch != 10; ++n)16.scanf("%d%c", &a[n], &ch);17.cnt = scanf("%d%c", &b[0], &ch);18.for (m = 1; ch != 10 && cnt == 2; ++m)19.cnt = scanf("%d%c", &b[m], &ch);20.sort(a, a + n);21.sort(b, b + m);22.diff = set_intersection(a, a + n, b, b + m, v.begin()) - v.begin();23.if (diff == min(n, m))24.{25.if (n < m) puts("A is a proper subset of B");26.else if (n > m) puts("B is a proper subset of A");27.else puts("A equals B");28.}29.else if (diff) puts("I"m confused!");30.else puts("A and B are disjoint");31.}32.return 0;33.}