Problem B The Blocks Problem(vector的使用)
题目链接:Problem B
题意:有n块木块,编号为0~n-1,要求模拟以下4种操作(下面的a和b都是木块编号)
1. move a onto b: 把a和b上方的木块全部归位,然后把a摞在b上面。
2. move a over b: 把a上方的木块全部归位,然后把a放在b所在木块堆的顶部。
3. pile a onto b: 把b上方的木块全部归位,然后把a及上面的木块整体摞在b上面。
4. pile a over b: 把a及上面的木块整体摞在b所在木块堆的顶部。
遇到quit时终止一组数据,忽略非法指令。
思路:每个木块堆都用一个vector来维护,move操作都要对a归位,onto操作都要对b归位可以一起处理,四种操作最后都是把a及以上的摞在b的顶上,只不过前两种a上面的为空。
note:
、resize(n)
调整容器的长度大小,使其能容纳n个元素。
如果n小于容器的当前的size,则删除多出来的元素。
否则,添加采用值初始化的元素。
、 resize(n, t)
多一个参数t,将所有新添加的元素初始化为t。
code:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
const int MAXN = ;
vector<int> pile[MAXN];
int n; void findBlock(int a, int& p, int& h)
{
for (p = ; p < n; ++p)
{
for (h = ; h < pile[p].size(); ++h)
{
if (pile[p][h] == a)
return;
}
}
} void clearAbove(int p, int h)
{
for (int i = h + ; i < pile[p].size(); ++i)
{
int b = pile[p][i];
pile[b].push_back(b);
}
pile[p].resize(h + );
} void pileOnto(int pa, int ha, int pb)
{
for (int i = ha; i < pile[pa].size(); ++i)
pile[pb].push_back(pile[pa][i]);
pile[pa].resize(ha);
} int main()
{
cin >> n;
for (int i = ; i < n; ++i) pile[i].push_back(i);
int a, b;
string s1, s2;
while (cin >> s1)
{
if (s1 == "quit") break;
cin >> a >> s2 >> b;
int pa, pb, ha, hb;
findBlock(a, pa, ha);
findBlock(b, pb, hb);
if (pa == pb) continue;
if ("move" == s1) clearAbove(pa, ha);
if ("onto" == s2) clearAbove(pb, hb);
pileOnto(pa, ha, pb);
}
for (int i = ; i < n; ++i)
{
cout << i << ":";
for (int j = ; j < pile[i].size(); ++j)
cout << " " << pile[i][j];
cout << endl;
}
return ;
}
Problem B The Blocks Problem(vector的使用)的更多相关文章
- UVa 101 - The Blocks Problem(积木问题,指令操作)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- UVa 101 The Blocks Problem Vector基本操作
UVa 101 The Blocks Problem 一道纯模拟题 The Problem The problem is to parse a series of commands that inst ...
- The Blocks Problem(vector)
题目链接:http://poj.org/problem?id=1208 The Blocks Problem Time Limit: 1000MS Memory Limit: 10000K Tot ...
- 【UVA - 101】The Blocks Problem(vector+模拟)
The Blocks Problem Descriptions:(英语就不说了,直接上翻译吧) 初始时从左到右有n个木块,编号为0~n-1,要求实现下列四种操作: move a onto b: 把a和 ...
- UVa101 The Blocks Problem(不定长数组vector)
The Blocks Problem 书上的一道例题,代码思路比较清晰,可以看懂. 相关知识: 若a是一个vector,则: a.size():读取它的大小 a.resize():改变大小 a.pus ...
- POJ 1208 The Blocks Problem
The Blocks Problem Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5397 Accepted: 231 ...
- 木块问题(The Blocks Problem,Uva 101)
不定长数组:vector vector就是一个不定长数组.不仅如此,它把一些常用操作“封装”在了vector类型内部. 例如,若a是一个vector,可以用a.size( )读取它的大小,a.resi ...
- Problem : 1002 ( A + B Problem II )
经验总结:一定要注意输出的格式,字符的空格,空行,一定要观察清楚.如本题的最后一个输出结果后面没有空行.最后代码实现的时候需要判断一下,代码如下 !=n) cout<<endl; Prob ...
- 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem B. Travelling Camera Problem set贪心
Problem B. Travelling Camera Problem 题目连接: http://www.codeforces.com/gym/100253 Description Programm ...
随机推荐
- [原]容器学习(一):动手模拟spring的IoC
介绍 学习经典框架的实现原理以及设计模式在其实际中的运用,是非常有必要的,可以让我们更好进行面向对象. 本篇文章就来模拟Spring的IOC功能,明白原理后,可以更好的使用它,进而为进行面向对象提供一 ...
- NOI2015 Day1
NOI2015 Day1 程序自动分析 题目描述:给出等式或不等式\(n\)条,问\(n\)条式子是否成立. solution: 用并查集处理等式,在判断不等式是否成立. 时间复杂度:\(O(n)\) ...
- poj2390
#include <stdio.h> #include <stdlib.h> int main() { int r,m,y,i; scanf("%d %d %d&qu ...
- javascript数组排序---2冒泡
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- selector是在文件夹drawable中进行定义的xml文件。
获取Drawable对象: Resources res = mContext.getResources(); Drawable myImage = res.getDrawable(R.drawable ...
- c# 针对不同数据库进行参数化查询
使用参数化 DbCommand 的一个缺点是需要参数的代码将仅适用于支持相同语法的提供程序.OLEDB.SqlClient 和 Oracle 提供程序全部使用不同的语法.例如,用于命名和指定参数的 S ...
- iOS小知识点大杂烩
转自OPEN经验 1,打印View所有子视图 po [[self view]recursiveDescription] 2,layoutSubviews调用的调用时机 * 当视图第一次显示的时候会被调 ...
- WPF利用依赖属性和命令编写自定义控件
以实例讲解(大部分讲解在代码中) 1,新建一个WPF项目,添加一个用户控件之后在用户控件里面添加几个控件用作测试, <UserControl x:Class="SelfControlD ...
- 浅谈 non-blocking I/O Multiplexing + poll/epoll 的正确使用
在前面的文章中曾经粗略讲过poll,那时是用阻塞IO实现,在发送和接收数据量都较小情况下和网络状况良好的情况下是基本没有问题的,read 不会只接收部分数据,write 也不会一直阻塞.但实际上pol ...
- 非原生APP开发中可以用到的JQ插件
fancybox 弹出层 图片什么的都可以 效果还不错..