UVa101 - The Blocks Problem
//UVa101 - The Blocks Problem
#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
using namespace std;const int maxn = 30;
int n;
vector<int>pile[maxn];//找木块a所在的pile和height,以引用的形式返回调用者
void find(int a, int &p, int &h){for(p = 0; p < n; p++)for(h = 0; h < pile[p].size(); h++)if(pile[p][h] == a) return;
}//把p堆高度为h的木块上方的所有木块移回原位
void back(int p, int h){for(int i = h+1; i < pile[p].size(); i++){int b = pile[p][i];pile[b].push_back(b);}pile[p].resize(h+1);
}//把p堆高度为h及其上方的木块整体移动到p2的顶部
void doing(int p, int h, int p2){for(int i = h; i< pile[p].size(); i++)pile[p2].push_back(pile[p][i]);pile[p].resize(h);
}int main(){int a, b;cin >> n;string s1, s2;for(int i = 0; i < n; i++) pile[i].push_back(i);while(cin >> s1 && s1 != "quit"){cin >> a >> s2 >> b;int pa, pb, ha, hb; find(a, pa, ha);find(b, pb, hb);if(pa == pb) continue;if(s2 == "onto") back(pb, hb);if(s1 == "move") back(pa, ha);doing(pa, ha, pb);}for(int i = 0; i < n; i++){printf("%d:",i);for(int j = 0; j < pile[i].size(); j++)printf(" %d",pile[i][j]);printf("\n");}return 0;
}/*
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
quit0: 0
1: 1 9 2 4
2:
3: 3
4:
5: 5 8 7 6
6:
7:
8:
9:
*/
UVa101 - The Blocks Problem相关推荐
- 算法竞赛入门经典(第二版) | 例题5-2 木块问题 (紫皮书牛啤!)(UVa101,The Blocks Problem)
大意: 输入n,代表n个木块,输入最多n种操作类型,按类型对木块进行操作,读入quit结束 输入输出格式: 1.move a onto b:将a和b所在上方的方块先归位,再将a移到b所在柱子 2.mo ...
- 题解 The Blocks Problem(UVa101)紫书P110vector的应用
紫书P110:vector的应用:UVa101 The Blocks Problem Vjudge题目地址请移步此处 题目大意: 输入n (0<n<25),得到编号为0到n-1的木块,分别 ...
- 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
原本以为是一道很简单的模拟题,结果写了一个小时...很长时间不碰算法题,的确手感差很多.不过我觉得随着刷题慢慢多起来应该会好的. 题目的意思也有点含糊,需要自己去猜,大概意思就是槽里有一堆木头,每个槽 ...
- 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,老师推荐了紫皮书,但是C++渣渣的我读题都很费劲,搜罗博主文章发现几乎都是 原题+代码 .现尽己所能整理,比较啰(xiang)嗦(xi),希望能对同起步小白有所帮助, ...
- 很有趣的STL初学资料
1.泛型程序设计简介与迭代器的介绍 2.常见的STL容器及其例题应用(UVA10474,UVA101,UVA10815,UVA156,UVA540,UVA136 HDU1027,CF501B,HDU1 ...
- 《算法竞赛入门经典(第2版)》——学习记录
前言: 这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录. 作为一只 ...
最新文章
- 基于CAP:深入剖析分布式一致性机制
- DTP模型之二:(XA协议之二)jotm分布式事务实现
- Spark机器学习9· 实时机器学习(scala with sbt)
- SSH免密码登录设置
- HashMap的存储过程
- ST发布世界上首款LoRa Soc单片机STM32WL
- pyqt5与html数据交互原理,pyqt5与本地html进行js交互
- 35 MM配置-采购-采购订单-设置价格差异的容差限制
- Spring Boot集成Swagger
- 《虚拟化与云计算》读书感(九)服务器虚拟化的其他核心技术
- spark学习-SparkSQL-java版JavaRDD与JavaPairRDD的互相转换
- Sklearn——用Sklearn实现线性回归(LinearRegression)
- java layer调用native层的android_media_AudioTrack_get_min_buff_size()确定audio track buffer的min size...
- [曲线拟合]使用Tensorflow拟合COS函数
- 微信小程序发布上线全流程(注册/开发/上传审核)
- 2019年8月8日 星期四 今日计划
- 图像分割-专有名词讲解
- Python自动化之-DDT数据驱动
- bcd 初始化库系统卷失败_中级|软考题库每日一练|2.24
- 蓝色基因超级计算机top500,美国力推Graph500超级计算机排名欲取代Top500