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 ...
随机推荐
- 看大数据时代下的IT架构(1)业界消息队列对比
一.MQ(Message Queue) 即 消息队列,一般用于应用系统解耦.消息异步分发,能够提高系统吞吐量.MQ的产品有很多,有开源的,也有闭源,比如ZeroMQ.RabbitMQ. ActiveM ...
- ThreadPool.QueueUserWorkItem的性能问题
在WEB开发中,为了降低页面等待时间提高用户体验,我们往往会把一些浪费时间的操作放到新线程中在后台执行. 简单的实现代码就是: //代码一 new Thread(()=>{ //do somet ...
- Linux下安装Oracle的过程和涉及的知识点-系列4
10.使用rpm安装包 假设本地有现成的相关包,能够直接使用rpm安装.rpm rpm包名,但有时会出现它须要其他包的支持,这时若须要忽略此提示.强行安装,运行rpm -i --force --nod ...
- 8月9日,PS、计算机基础(预科)
一. PS 掌握简单的图标修改. 1.图层 2.保存PSD格式,有图层:JPG格式,没有图层. 3.魔棒工具(调整值 ...
- VS2010断点无效
可能的原因如下: 1. 菜单tools->Options->Debugging->General,有个Require source files to exactly match t ...
- window权限 及c++实现 【网摘】(转)
from : http://blog.csdn.net/zipper9527/article/details/6256459 http://www.lihuasoft.net/article/show ...
- nginx args
$args $content_length $content_type $document_root $document_uri $host $http_user_agent $http_cookie ...
- 微信平台BAE
http://www.2cto.com/kf/201405/299487.html http://blog.csdn.net/lyq8479/article/details/26104667 http ...
- 激活工具 – Microsoft Toolkit 2.4.7
Microsoft Toolkit是一款很出名的Windows/Office激活工具,最早是因为激活Office 2010出名的,想必不少人也用过吧?Microsoft Toolkit从2.4.1版本 ...
- Html小插件
1.天气预报插件 效果图: 源代码: <iframe width="650" scrolling="no" height="60" f ...