uva12096集合栈计算机 The SetStack Computer
1.uva253骰子涂色2.洛谷uva220
3.uva12096集合栈计算机 The SetStack Computer
4.uva101The Blocks Problem5.uva400 Unix Is命令 Unix ls6.uva10391 复合词 Compound Words7.小球下落 Dropping Balls (uva679)8.树的层次遍历 Trees on the level uva1229.树 Tree uva54810.天平 Not so Mobile uva83911.P1102 A-B 数对12.成最多水的容器13.P3367 【模板】并查集14.947. 移除最多的同行或同列石头15.P1082 [NOIP2012 提高组] 同余方程16.803 打砖块17.B3644 【模板】拓扑排序 / 家谱树18.U107394 拓扑排序模板19.P1137 旅行计划20.936 戳印序列21.P4017 最大食物链计数22.2050 并行课程 III23.P3366 【模板】最小生成树24.P2330 [SCOI2005] 繁忙的都市25.Abbott的复仇 Abbott's Revenge26.P1960 郁闷的记者27.P4391 [BOI2009] Radio Transmission 无线传输洛谷链接集合栈计算机 The SetStack Computer - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
一道典型的以栈为背景的数据结构题。题目简单但是程序却并不简单(个人观点)。普及组的难度有点低了感觉。
个人认为这道题目可以帮助自己熟悉或者说更好的掌握STL的使用以及妙用。
难点:1、首先出栈入栈的是集合,如果单纯的使用set的话会出现set<set<set<...>>>的情况。所以用一个ID 代替一种集合的想法就显而易见了(很值得学习)。
2、并集交集的实现。两种方法,一种是自带的函数set_union(取并集)、set_intersection(取交集)、set_difference(取差集)。
有兴趣可以了解关于C++中使用set_union、set_intersection、set_difference,set_symmetric_difference、merge的总结-CSDN博客,其中也展现了如果不用自带函数该咋做。
#include<bits/stdc++.h> using namespace std; typedef set<int> Set; //类型定义使代码更简洁 map<Set,int> ID; //由map映射来表示一个集合的ID vector<Set> idsearch; //由idsearch的右边界来表示ID,其次还可以根据idsearch[i]可以取出对应的Set int IDsearch(Set x){ //查找ID if (ID.count(x)) return ID[x]; idsearch.push_back(x); return ID[x]=idsearch.size()-1; } int main(){ stack<int> Stack; //栈 int t; cin>>t; while(t--){ int n;string s; cin>>n; for (int i=0;i<n;i++){ cin>>s; if (s[0]=='P') Stack.push(IDsearch(Set())); else if (s[0]=='D') Stack.push(Stack.top()); else { Set x1=idsearch[Stack.top()];Stack.pop(); Set x2=idsearch[Stack.top()];Stack.pop(); Set x; if (s[0]=='U') set_union(x1.begin(),x1.end(),x2.begin(),x2.end(),inserter(x,x.begin())); //取并集 if (s[0]=='I') set_intersection(x1.begin(),x1.end(),x2.begin(),x2.end(),inserter(x,x.begin()));//取交集 if (s[0]=='A') {x=x2;x.insert(IDsearch(x1));} Stack.push(IDsearch(x)); } cout<<idsearch[Stack.top()].size()<<endl; } cout<<"***"<<endl; } return 0; }
Ps:个人认为是一道很有价值的题目
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架