木块问题(UVa101)
题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=37
将操作分解为基本步骤,编写函数,重复调用
C++11代码如下:
#include<iostream>
#include<vector>
#include<string>
using namespace std; const int maxn =;
vector<int> pile[maxn];
int n;
void find_block(int a, int& p, int& h) { //找到木块所在的位置和高度(从0开始)
for (p = ; p < n; p++) {
for (h = ; h < pile[p].size(); h++) {
if (pile[p][h] == a) return;
}
}
} void clear_above(int p, int h) { //将p位置高度h以上的木块移回原位
for (int i = h + ; i < pile[p].size(); i++) {
int b = pile[p][i];
pile[b].push_back(b);
}
pile[p].resize(h + ); //保留 0-h高度的木块
} void pile_onto(int p, int p2,int h) { //将p位置处从h高度的木块全部移动到p2顶部
for (int i = h; i < pile[p].size(); i++) {
pile[p2].push_back(pile[p][i]);
}
pile[p].resize(h); //保留高度0~h-1的木块
} void print() { //输出全部操作介绍后各个位置木块的信息
for (int i = ; i < n; i++) {
cout << i << ':';
for (int j = ; j < pile[i].size(); j++)
cout << ' ' << pile[i][j];
cout << endl;
}
} int main() {
int ha, pa, hb, pb;
cin >> n;
for (int i = ; i < n; i++) pile[i].push_back(i);
string s1, s2;
int a, b;
while (cin >> s1 >> a >> s2 >> b) {
find_block(a, pa, ha);
find_block(b, pb, hb);
if (pa == pb) continue;
if (s1 == "move") clear_above(pa, ha);
if (s2 == "onto") clear_above(pb, hb);
pile_onto(pa, pb, ha);
}
print();
return ;
}
木块问题(UVa101)的更多相关文章
- 算法习题---5.2木块问题(UVa101)
一:题目 输入n,得到编号为0~n-1的木块,分别摆放在顺序排列编号为0~n-1的位置.现对这些木块进行操作,操作分为四种. .move a onto b:把木块a.b上的木块放回各自的原位,再把a放 ...
- 5_2 木块问题(UVa101)<vector的使用>
[背景] 在计算机科学中的很多地方都会使用简单,抽象的方法来做分析和实验验究.比如在早期的规划学和机器人学的人工智能研究就利用一个积木世界,让机械臂执行操作积木的任务. 在这个问题中,你将在确定的规则 ...
- uva 101 POJ 1208 The Blocks Problem 木块问题 vector模拟
挺水的模拟题,刚开始题目看错了,poj竟然过了...无奈.uva果断wa了 搞清题目意思后改了一下,过了uva. 题目要求模拟木块移动: 有n(0<n<25)快block,有5种操作: m ...
- HDOJ 1330 Deck(叠木块-物理题啊!贪心算法用到了一点)
Problem Description A single playing card can be placed on a table, carefully, so that the short edg ...
- Chocolate&&木块拼接&&Cards&& Wet Shark and Bishops
B. Chocolate time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- CSS3实现3D木块旋转动画
CSS3实现3D木块旋转动画,css3特效,旋转动画,3D,立体效果,CSS3实现3D木块旋转动画是一款迷人的HTML5+CSS3实现的3D旋转动画. 代码下载:http://www.huiyi8.c ...
- 木块问题(The Blocks Problem,Uva 101)
不定长数组:vector vector就是一个不定长数组.不仅如此,它把一些常用操作“封装”在了vector类型内部. 例如,若a是一个vector,可以用a.size( )读取它的大小,a.resi ...
- UVA101 The Blocks Problem 题解
题目链接:https://www.luogu.org/problemnew/show/UVA101 这题码量稍有点大... 分析: 这道题模拟即可.因为考虑到所有的操作vector可最快捷的实现,所以 ...
- nyoj 260-数数小木块 (打表)
260-数数小木块 内存限制:64MB 时间限制:3000ms 特判: No 通过数:17 提交数:24 难度:1 题目描述: 在墙角堆放着一堆完全相同的正方体小木块,如下图所示: 因为木块堆得实在是 ...
随机推荐
- Codeforces Round #271 (Div. 2) D 简单dp
D. Flowers time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input ...
- HashCode与Equals回顾
HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...
- signal和sigaction 分析
1:signal 函数 原型: sighandler_t signal(int signum, sighandler_t handler) typedef void (*sighandler ...
- Libevent学习笔记(五) 根据例子学习bufferevent
libevent中提供了一个Hello-world.c 的例子,从这个例子可以学习libevent是如何使用bufferevent的. 这个例子在Sample中 这个例子之前讲解过,这次主要看下buf ...
- OpenCV---环境安装和初次使用
一:环境安装 pip3 install opencv-python #OpenCV模块,必须安装 pip3 install opencv-contrib-python #OpenCV扩展模块,选择安装 ...
- HTML5 表单自学记录
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 将new Date() 格式化为 ’2018-10-11‘ 的字符串格式
function dateToString( date , format ){ if(!date) return ""; if (!Common.type.isDate(date) ...
- 1.Spring揭秘--Ioc容器
1.Ioc即控制反转,假设一个类需要依赖另外一个类,在最初始的做法就是创建那个依赖类的对象,然后使用这个类提供的功能,如果创建这个依赖类的职责交给Ioc Service Provider去做,那么这就 ...
- Python学习笔记(2.1)函数参数练习
关键字参数 和 命名关键字参数 # -*- coding: utf-8 -*- def print_scores(**kw): print(' Name Score') print('-------- ...
- CSS与HTML结合
CSS与HTML结合的4中方式: 1.每个HTML标签都有style属性 2.当页面中有多个标签具有相同样式时,可定义style标签封装样式以复用 <style type=”text/css”& ...