uva12096---stack的使用及equeue的使用

code:

/*
1、stack
 		stack 模板类的定义在<stack>头文件中。
  		stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素
	          类型是必要的,在不指定容器类型时,默认的容器类型为deque。
			  定义stack 对象的示例代码如下:
		stack<int> s1;
		stack<string> s2;
		
		stack 的基本操作有:
							入栈,如例:s.push(x);
							出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。
							访问栈顶,如例:s.top()
							判断栈空,如例:s.empty(),当栈空时,返回true。
							访问栈中的元素个数,如例:s.size()。

2、queue
		queue 模板类的定义在<queue>头文件中。
		     与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类
				型,元素类型是必要的,容器类型是可选的,默认为deque 类型。
		定义queue 对象的示例代码如下:
				queue<int> q1;
				queue<double> q2;

		queue 的基本操作有:
							入队,如例:q.push(x); 将x 接到队列的末端。
							出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
							访问队首元素,如例:q.front(),即最早被压入队列的元素。
							访问队尾元素,如例:q.back(),即最后被压入队列的元素。
							判断队列空,如例:q.empty(),当队列空时,返回true。
							访问队列中的元素个数,如例:q.size()
*/ 

#include<iostream>
#include<string>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;

#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())

typedef set<int> Set;
map<Set,int> IDcache; // 把集合映射成ID
vector<Set> Setcache; // 根据ID取集合

// 查找给定集合x的ID。如果找不到,分配一个新ID
int ID (Set x) {
  if (IDcache.count(x)) return IDcache[x];
  Setcache.push_back(x); // 添加新集合
  return IDcache[x] = Setcache.size() - 1;
}

int main () {
  int T;
  cin >> T;
  while(T--) {
    stack<int> s; // 题目中的栈
    int n;
    cin >> n;
    for(int i = 0; i < n; i++) {
      string op;
      cin >> op;
      if (op[0] == 'P') s.push(ID(Set()));
      else if (op[0] == 'D') s.push(s.top());
      else {
        Set x1 = Setcache[s.top()]; s.pop();
        Set x2 = Setcache[s.top()]; s.pop();
        Set x;
        if (op[0] == 'U') set_union (ALL(x1), ALL(x2), INS(x));
        if (op[0] == 'I') set_intersection (ALL(x1), ALL(x2), INS(x));
        if (op[0] == 'A') { x = x2; x.insert(ID(x1)); }
        s.push(ID(x));
      }      
      cout << Setcache[s.top()].size() << endl;
    }
    cout << "***" << endl;
  }
  return 0;  
}

  这代码就懒得解释了,前面能看懂,这里面就很简单了

posted on 2014-12-09 00:46  lzm420241  阅读(115)  评论(0)    收藏  举报

导航