EOJ 1641/UVa The SetStack Computer】的更多相关文章

Background from Wikipedia: “Set theory is a branch of mathematics created principally by the German mathematician Georg Cantor at the end of the 19th century. Initially controversial, set theory has come to play the role of a foundational theory in m…
UVA.12096 The SetStack Computer ( 好题 栈 STL混合应用) 题意分析 绝对的好题. 先说做完此题的收获: 1.对数据结构又有了宏观的上的认识; 2.熟悉了常用STL(set,map,vector)的常用用法; 3.学习了一种问题转化的方式. 我想如果告诉我这题用STL解决,并且还能独立完成的话,那么STL应该算是过关了. 有下列操作集: 1.PUSH:向栈顶PUSH一个空集合的元素: 2.DUP: 弹出栈顶元素: 3.UNION: 弹出2个栈顶元素,并且去并集…
Background from Wikipedia: \Set theory is a branch of mathematics created principally by the German mathematician Georg Cantor at the end of the 19th century. Initially controversial, set theory has come to play the role of a foundational theory in m…
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3248 13916058 12096 The SetStack Computer Accepted C++ 0.302 2014-07-21 03:43:15 The SetStack Computer Background from Wikipedia: \Set theory i…
集合栈计算机(The SetStack Computer, ACM/ICPC NWERC 2006,Uva12096) 题目描述 有一个专门为了集合运算而设计的"集合栈"计算机.该机器有一个初始为空的栈,并且支持以下操作: PUSH:空集"{}"入栈 DUP:把当前栈顶元素复制一份后再入栈 UNION:出栈两个集合,然后把两者的并集入栈 INTERSECT:出栈两个集合,然后把二者的交集入栈 ADD:出栈两个集合,然后把先出栈的集合加入到后出栈的集合中,把结果入栈…
UVA12096 - The SetStack Computer(set + map映射) 题目链接 题目大意:有五个动作: push : 把一个空集合{}放到栈顶. dup : 把栈顶的集合取出来,在入栈两次. add : 出栈两次.把第一个集合作为一个元素放入第二个集合中,再将第二个集合入栈 union: 出栈两次,取这两个集合的并集.将结果入栈. intersect: 出栈两次.取这两个集合的交集,将结果入栈. 每次运行动作后还须要输出眼下栈顶集合的元素个数. 解题思路:这题能够用栈和se…
例题5-5 集合栈计算机(The Set Stack Computer,ACM/ICPC NWERC 2006,UVa12096) 有一个专门为了集合运算而设计的"集合栈"计算机.该机器有一个初始为空的栈,并且 支持以下操作. PUSH:空集"{}"入栈. DUP:把当前栈顶元素复制一份后再入栈. UNION:出栈两个集合,然后把二者的并集入栈. INTERSECT:出栈两个集合,然后把二者的交集入栈.ADD:出栈两个集合,然后把先出栈的集合加入到后出栈的集合中,把…
点击打开链接uva 12096 思路: STL模拟 分析: 1 题目给定5种操作,每次输出栈顶集合的元素的个数 2 利用stack和set来模拟,set保存集合的元素.遇到push的时候直接在stack里面push入一个空的set,遇到Dup的时候把栈顶的集合在push进stack一次,遇到union的时候把栈顶的两个集合合并,遇到Intersect的时候把栈顶的两个集合进行求交集然后push进stack,遇到Add的时候要注意如果第一个集合是空集那么我们就认为是在第二个集合里面加入2,否则就要…
题意:给出一个空的栈,支持集合的操作,求每次操作后,栈顶集合的元素个数 从紫书给的例子 A={{},{{}}} B={{},{{{}}}} A是栈顶元素,A是一个集合,同时作为一个集合的A,它自身里面也可以集合套集合 #include<iostream> #include<cstdio> #include<cstring> #include <cmath> #include<stack> #include<vector> #inclu…
题意: 有一个集合栈计算机,栈中的元素全部是集合,还有一些相关的操作.输出每次操作后栈顶集合元素的个数. 分析: 这个题感觉有点抽象,集合还能套集合,倒是和题中配的套娃那个图很贴切. 把集合映射成ID,就可以用 stack<int>来模拟题中的集合栈,然后用 vector<Set> 来根据下标进行集合的索引. 代码虽短,但还须多体会. #include <cstdio> #include <string> #include <vector> #i…
题意:初始状态的栈内包含一个空集,对栈进行一下操作: PUSH:向栈内压入一个空集 DUP:复制栈顶,并压入栈内 UNION:将栈顶端两个集合出栈,并将两个元素的并集入栈 INTERSECT:将栈顶端两个集合出栈,并将两个元素的交集入栈 ADD:将栈顶端两个集合出栈,将先出栈元素加入后出栈元素的集合中,而后入栈 对于每次操作,输出栈顶集合的元素数. 思路:声明一个栈st用来存放集合,声明多个堆用于表示集合,声明映射<set,int>表示集合编号,对于每次待入栈的集合进行编号查找工作,若已经有编…
#include<bits/stdc++.h> using namespace std; typedef set<int> Set; map<Set,int> IDcache; vector<Set> Setcache; stack<int> s; int ID(Set x) { if(IDcache.count(x)) return IDcache[x]; Setcache.push_back(x); return IDcache[x]=Set…
题意: 有5种操作: PUSH:加入“{}”空集合入栈. DUP:栈顶元素再入栈. UNION:出栈两个集合,取并集入栈. INTERSECT:出栈两个集合,取交集入栈. ADD:出栈两个集合,将先出栈的加入到后出栈的集合中. 输入不超过2000, 保证操作顺利进行. 分析: 用set<int>(本身又可以映射成一个int)去模拟集合,所以可以将不同的集合映射成int型. 用一个Map<set<int>,int> 去映射成不同的int. 以后需要set做交集并集的时候再…
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用set来解决这个问题. 考虑如何表示 { {{}} }这个集合 我们可以把{}这个集合和一个数字映射->1 然后把1加入到某个set里面去 即 {1} 则这就对应了->{ {} } 然后把{1}也用一个int对应->2 然后把2加入一个集合 {2} 则这个就对应了->{ {{}} } 这样,每个集合都能用set来表示了. 则用map < set ,int>来搞映射. 然后正常地用set求交集.并集就好…
Many areas of Computer Science use simple, abstract domains for both analytical and empirical studies. For example, an early AI study of planning and robotics (STRIPS) used a block world in which a robot arm performed tasks involving the manipulation…
题目传送门 题意:给一些对集合的操作,询问每一次操作后栈顶的集合元素个数 分析:首先{}是空的,每一次add时候,{} -> { {} }变成了有一个元素的集合,利用set和stack,map容器能很方便解决这道题. if (!mp[s1]) mp[s1] = ++cnt; s2.insert (mp[s1]); } sta.push (s2); return s2.size (); } int intersect() { pop (); tmp.clear (); for (it=s1.beg…
代码     typedef  map<Set,  vector<Set> Setcache;                  stack<               cin >> t;              cin >> n;         IDCache.clear();         Setcache.clear();                       cin >> op;                       …
题目大意:有n个网站,由m条线路相连,每条线路都有一定的花费,找出连接所有线路的最小花费. 最小生成树问题(Minimal Spanning Tree, MST),使用Kruskal算法解决. #include <cstdio> #include <vector> #include <algorithm> using namespace std; typedef pair<int, int> ii; #define MAXN 1000100 int p[MA…
题目描述: #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())…
题目:编辑距离.给你两个串,将已知串转化成目标串,能够增.删.改字母,求最小操作次数. 分析:dp,编辑距离.同最大公共子序列. 注意操作位置是实时变化的. (前面都已经处理好了)                      f[i][j] = f[i-1][j]         这时删掉 str1[i],位置j+1.                      f[i][j] = f[i][j-1]         这时添加 str2[j].位置j:                      f[…
突然转进到第五章的low题目的原因是做到图论了(紫书),然后惊喜的发现第一题就做不出来.那么里面用到了这一题的思想,我们就先解决这题.当然,dp必须继续做下去,这是基本功.断不得. 题意分析 这条题真的是一条sb模拟题.但是我们还是可以学些什么:一,标id的思想(后面用到了,就是那条UVa12219).二,set的基本操作.具体思路看代码.但是这题哪里有什么算法...set 和 map 混合应用,真的用板子写的话代码相近度很高 代码 #include <bits/stdc++.h> #defi…
杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDIATE DECODABILITY…
转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092.1093. 1094.1095.1096.1097.1098.1106.1108.1157.116…
1.LA 5908/UVA1517 Tracking RFIDs 题意:给出s个传感器的位置,以及其感应范围.如果某个方向上有墙,则该方向上感应距离减1.现在有w个墙,给出p个物品的位置,问其能被几个传感器探测到. 思路:传感器用set保存.之后传感器和物品之间是否有墙用线段是否相交来判断. #include<iostream> #include<algorithm> #include<vector> #include<set> #include<cm…
发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) ACM总结(fennec) 其实在北京比赛完的时候,我就想写了,不过还是早了点,直到上海比赛结束,大家的心中都不是太好受.郭老师有句话:你们这样做也是对的,不成功就成仁.让我的心也能安慰了不少. 我是从大一下学期开始接触ACM的,那时候我们学校才刚刚起步,siyee,wjiang师兄可以说是我的领路人了…
今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetStack Computer)的思路敲了半天,但是efficiency是贼鸡儿低,而且最后我搞不明白怎么输出结果了....然后只好参考了这位同学的代码.思路大致是跟着lrj的走的,具体的实现有些需要注意的地方. 代码 #include <bits/stdc++.h> #define QUICKIO #…
3.28更新 在EOJ 1641 集合栈计算机中,使用并集和补集时候,第五个参数使用x.begin()会报错:assignment of read-only location,而使用inserter(x,x.begin())就不会.没有声明过什么const,不知道为什么. 如果x是vector,那么需要预留大小,否则将会segmentation fault,这个下面已经提到. 上面题目中是set,查阅得到这句话:“由于set内部是默认排序的,所以我们不能直接改变set关键字的值(set中的关键字…
题意:电脑记录了某一时刻每个赛车的前面和后面个有多少辆车(多个车并排时在别的车那只算一辆),问最少有多少个不合理的数据. 分析:看到n<=1000时,就尽量往DP上想吧. 每输入一组数据a,b,如果a+b>=n肯定不行,加上自己就超过n了.否则这个车肯定在(a+1,n-b)这段区间内,所以这段区间内的车子数(cnt[][]记录)++,如果车子数大于区间长度,就不再加了.搞完输入数据后,再来DP: 定义:dp[i] :前 i 辆车最多有多少车位置合理 则有方程: dp[i] = min(dp[j…
题意: 有一个01串,每一步都会将所有的0变为10,将所有的1变为01,串最开始为1. 求第n步之后,00的个数 分析: 刚开始想的时候还是比较乱的,我还纠结了一下000中算是有1个00还是2个00 最终想明白后,并不会出现这样的子串. 总结了几个要点: 第n步之后,串的长度为2n,且0和1的个数相等,分别为2n-1 1经过两步变化为1001,所以每个1经过两步变化就会得到一个00,而且这个00分别被左右两边一个1包围着,不会与其他数字凑出额外的00 0经过两步变化为0110,所以00就会变成0…
题意: 就是用一个字符矩阵代表一个闭合的阴影部分,然后求阴影部分的面积. 分析: 一个'/'和'\'字符都代表半个小方块的面积. 关键就是判断'.'是否属于阴影部分,这才是本题的关键. 从第一列开始,从上到下扫面'/'和'\'字符的个数,如果是奇数,则'.'属于阴影部分,阴影面积加一. #include <cstdio> + ; char map[maxn][maxn]; int main() { //freopen("in.txt", "r", std…