uva 101 木块问题
题目大意:
输入n,得到编号为0~n-1的木块,分别摆放在顺序排列编号为0~n-1的位置。现对这些木块进行操作,操作分为四种。
1、move a onto b:把木块a、b上的木块放回各自的原位,再把a放到b上;
2、move a over b:把a上的木块放回各自的原位,再把a发到含b的堆上;
3、pile a onto b:把b上的木块放回各自的原位,再把a连同a上的木块移到b上;
4、pile a over b:把a连同a上木块移到含b的堆上。
当输入quit时,结束操作并输出0~n-1的位置上的木块情况
Sample Input
10
move 9 onto 1
move 8 over 1
move 7 over 1
move 6 over 1
pile 8 over 6
pile 8 over 5
move 2 over 1
move 4 over 9
quit
Sample Output
0: 0
1: 1 9 2 4
2:
3: 3
4:
5: 5 8 7 6
6:
7:
8:
9:
思路:一个堆一个一维数组,整体二维数组(不定长数组使用STL中的vector来完成)
审题可发现move会将a上方的木块归位,onto会将b上方的木块归位
因此只需要判断move和onto将相应的归位操作完成后,即可直接将(a及a以上的木块)移到(b及b以上的木块)之上
#include<iostream> #include<cstdio> #include<vector> #include<string> #include<algorithm> using namespace std; const int maxn = 25; void start_block(int n); void show_block(); void found_block(int a, int& p, int& h); void clear(int p, int h); void move(int a, int ha, int b); int n; vector<int> pile[maxn]; int main() {string s1, s2;int a, b;cin >> n;start_block(n);show_block();while (cin >> s1&&s1 != "quit"&&cin >> a >> s2 >> b){int pa, pb, ha, hb;found_block(a, pa, ha);found_block(b, pb, hb);//if (s1 == "quit") break;if (pa == pb) continue;if (s1 == "move")clear(pa, ha);if (s1 == "onto")clear(pb, hb);move(pa, ha, pb);}show_block(); return 0; }void start_block(int n)//初始化木块 {for (int i = 0; i < n; i++){pile[i].push_back(i);} } void found_block(int a, int& p, int& h)//查找a木块的位置,以引用的形式返回调用者 {for (p = 0; p < n; p++){for (h = 0; h < pile[p].size(); h++)if (pile[p][h] == a)return;} } void show_block() {for (int i = 0; i < n; i++){cout << i << ":";for (int j = 0; j < pile[i].size(); j++){cout << " " << pile[i][j];}cout << endl;} } void clear(int p, int h) //将第p堆h高度以上的木块归位 {for (int i = h + 1; i < pile[p].size(); i++){int x = pile[p][i];pile[x].push_back(x);}pile[p].resize(h + 1); } void move(int a, int ha, int b) //(a及a以上的木块(b及b以上的木块)之上 {for (int i = ha; i < pile[a].size(); i++){pile[b].push_back(pile[a][i]);}pile[a].resize(ha); }
问题:
这里第一次使用了cin当作while条件,以前一直用的是while(scanf)来判断的
scanf作为返回值是返回的是正确接收的个数,而cin并不是如此
cin当作while循环条件的详细测试将写在下一篇博客里
不定长数组:vector
头文件 #include<vector> vector<int> vec;迭代器: vector<int>::iteratorite ite = vec.begin();vec.push_back(1);尾部添加vec.pop_back(1);尾部删除 (vs里增加已存在空间的一半) vec.reserve(10);容量变大 vec.resize(3);重新设置有效原数个数 vec.empty(); vec.at(3);元素的引用 vec.back();最后一个元素 #include<algorithm> vec.insert(vec.begin()+2,12); 添加元素 vec.clear(); vec.assign((vec.begin(),vec.end()); vec.erase(vec.begin(),vec.end()); vec.assign(2,5); 迭代器失效
算法: #include<algorithm> 遍历: for_each(vec.begin(),vec.end(),函数); 排序: sort(vec.begin(),vec.end()); #include<functional> sort(str.begin(),str.end(),greater<int>());从大到小 乱序: random_shuffle(vec.begin(),vec.end());
转载于:https://www.cnblogs.com/seamusopen/p/8447013.html
uva 101 木块问题相关推荐
- Uva 101 the block problem 木块问题(算法竞赛经典入门)STL vector
Uva 101 the block problem 木块问题 题目大意: 输入n,得到编号为0~n-1的木块,分别摆放在顺序排列编号为0~n-1的位置.现对这些木块进行操作,操作分为四种. 1.mov ...
- the blocks problem(uva 101 or poj 1208)
题目描述见:uva 101 or poj 1208 关键在于彻底理解题目中搬积木的几个命令的含义,见具体分析 如果还不能理解题意,那么找一个正确通过的代码,编译并输入测试数据,查看其每一个命令的执行情 ...
- 《算法竞赛入门经典》 例题5-2 木块问题(The Blocks Problem,UVa 101)
原题及翻译 Many areas of Computer Science use simple, abstract domains for both analytical and empirical ...
- Uva 101:木块问题 The Blocks Problem(详细说明)+(难点)
算法竞赛入门经典 开始接触ACM,老师推荐了紫皮书,但是C++渣渣的我读题都很费劲,搜罗博主文章发现几乎都是 原题+代码 .现尽己所能整理,比较啰(xiang)嗦(xi),希望能对同起步小白有所帮助, ...
- uva 101 The Blocks Problem
1. move a onto b在將a搬到b上之前,先將a和b上的積木放回原來的位置(例如:1就放回1的最開始位罝) 2. move a over b在將a搬到b所在的那堆積木之上之前,先將a ...
- UVA - 101:The Blocks Problem
原本以为是一道很简单的模拟题,结果写了一个小时...很长时间不碰算法题,的确手感差很多.不过我觉得随着刷题慢慢多起来应该会好的. 题目的意思也有点含糊,需要自己去猜,大概意思就是槽里有一堆木头,每个槽 ...
- 初学者acm的练习题指南
上机练习题参考题 忘了在哪找的啦~~希望对大家有帮助呦 <!--[if !supportLists]-->1. <!--[endif]-->Programming Bas ...
- ICPC训练联盟2021寒假冬令营(6)_2021.01.25_笔记
文章目录 试题链接 学习笔记 - C++ STL 简介 STL容器实验 序列式容器 关联式容器 集合容器 A - The Blocks Problem (POJ 1208, UVA 101) 中文释义 ...
- WaWa的奇妙冒险(第二周集训自闭现场)
第二周周记 (一)例题记录 A-简单计算器 (水题,栈的运用) HDU - 1237 Input Output Sample Input Sample Output 理解 AC代码 B-计算 (逆波兰 ...
最新文章
- 并查集+二分-hdu-4750-Count The Pairs
- 报告解读丨细数万亿企服市场发展史,行业发展新趋势
- OutOfMemoryException异常解析
- Python Cookbook 3rd Edition Documentation
- golang ide 升级
- php openssl des ecb,php7.2 des-ede3-ecb加密报错:openssl_encrypt():Unknown cipher algorithm 落叶随风博客...
- Android基础View回顾
- Redis 数据类型及应用场景
- servlet实现mvc
- EO CAT软件下载数据
- 面试必考:秒杀系统的9个核心知识点,一次性打包给你
- Oracle客户端安装配置crystal reports注意
- 主流数据库之MySQL函数和MySQL数据操作基础知识及示例
- 什么是 Office Open XML 文件格式
- LeCo-238. 除自身以外数组的乘积
- try/catch 的解释与用法
- unable to resolve superclass of 解决方法
- 基带信号与频带信号的基础认识
- k折交叉验证(k-fold Cross-validation)
- POI 读写EXCEL日期类型单元格
热门文章
- xml c libxml类库使用
- 如何正确的对待设计模式——我的观点
- 金属表面划痕检测Halcon
- 计算机前端专业术语,学习计算机知识必须懂得50个专业术语
- cef在android中使用_嵌入Chrome cef之完整版(本教程基于cef1)
- java vector内存结构_Java 数据结构
- python制作二级菜单_python实现二级登陆菜单及安装过程
- 七、DNS报文及抓包分析
- spring单元测试无法注入bean_2019年,最新的Spring 面试108题 “ 系列 ”,附带答案.........
- 随行付微服务测试之静态代码扫描