UVa 101 The Blocks Problem
题意:给出从左到右放置的n块木块(从0开始编号),再给出四种操作,再给出相应的操作,输出操作结束后每一堆木块的情况。
学习的紫书,因为每一堆的木块数是在发生变化的,所以用vector。 然后就是模拟几种操作
学习了这个& 在这个函数里面,find_block(inta,int &p,int&h)
紫书上写的注释是“找出木块a所在的pile和height,以引用的形式返回调用者”
最开始不明白= =然后写了一个小的程序试验了一下
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; void f(int &h)
{
h=;
h=;
h=;
} int main()
{
int ha;
f(ha);
printf("ha=%d\n",ha);
}

应该是最后p的值变为了多少,就将这个值返回到那个相应的实参的值
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std; const int maxn=;
int n;
vector<int> pile[maxn]; void find_block(int a,int &p,int &h)//找出木块a在哪一堆,及其所在的那一堆的高度
{
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);//第b块的原位置在第b堆
}
pile[p].resize(h+);
} void pile_onto(int p,int h,int p2)//将第p堆高度为h及其上方的木块整体移到p2堆上
{
for(int i=h;i<pile[p].size();i++)
pile[p2].push_back(pile[p][i]);
pile[p].resize(h);
} void print() //输出每一堆的情况
{
for(int i=;i<n;i++)
{
printf("%d:",i);
for(int j=;j<pile[i].size();j++)
printf(" %d",pile[i][j]);
printf("\n");
}
} int main()
{
int a,b;
cin>>n;
string s1,s2;
for(int i=;i<n;i++)
pile[i].push_back(i);
while(cin>>s1>>a>>s2>>b)
{
int ha,hb,pa,pb;
find_block(a,pa,ha);
find_block(b,pb,hb);
if(pa==pb) continue;
if(s2=="onto") clear_above(pb,hb);//当语句中含有onto时,都是要将b堆上面的放置回原位置的
if(s1=="move") clear_above(pa,ha);//当语句中含有move时,都是要将a堆上面的放置回原位置的
pile_onto(pa,ha,pb);
}
print();
return ;
}
UVa 101 The Blocks Problem的更多相关文章
- UVa 101 The Blocks Problem Vector基本操作
UVa 101 The Blocks Problem 一道纯模拟题 The Problem The problem is to parse a series of commands that inst ...
- UVa 101 - The Blocks Problem(积木问题,指令操作)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- UVa 101 - The Blocks Problem STL
题目:给你n个方块,有四种操作: .move a onto b,把a和b上面的方块都放回原来位置,然后把a放到b上面: .move a over b,把a上面的放回原处,然后把a放在b所在的方块堆的上 ...
- Uva 101 -- the block problem
Uva 101 the block problem 题目大意: 输入n,得到编号为0~n-1的木块,分别摆放在顺序排列编号为0~n-1的位置.现对这些木块进行操作,操作分为四种. 1.move a o ...
- uvaoj 101 - The Blocks Problem(vector应用+技巧)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=835&page= ...
- 木块问题(The Blocks Problem,Uva 101)
不定长数组:vector vector就是一个不定长数组.不仅如此,它把一些常用操作“封装”在了vector类型内部. 例如,若a是一个vector,可以用a.size( )读取它的大小,a.resi ...
- 【UVA - 101】The Blocks Problem(vector+模拟)
The Blocks Problem Descriptions:(英语就不说了,直接上翻译吧) 初始时从左到右有n个木块,编号为0~n-1,要求实现下列四种操作: move a onto b: 把a和 ...
- POJ 1208 The Blocks Problem
The Blocks Problem Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5397 Accepted: 231 ...
- 【暑假】[深入动态规划]UVa 1380 A Scheduling Problem
UVa 1380 A Scheduling Problem 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=41557 ...
随机推荐
- logback日志项目使用方法 - 150205交易模块添加日志信息logback,orderNo订单号为log主键便于跟踪,数字常量化,解决取消支付BUG,弱网络环境原因
1.项目里面的日志,便于跟踪数据的变更和异常错误信息产生.生产环境的日志级别是INFO,测试环境日志级别DEBUG,如果生产环境的日志级别是DEBUG,虽然方便查询问题,可以看到SQL语句等信息,但是 ...
- iptables使用multiport 添加多个不连续端口 不指定
iptables使用multiport 添加多个不连续端口 碟舞飞扬 , 01:26 , Linux技术 , 评论(0) , 引用(0) , 阅读(12214) , Via 本站原创 大 | 中 ...
- 在iptables防火墙下开启vsftpd的端口
在开启vsftpd端口后发现用客户端工具能登陆,但无法浏览文件和新建文件.此时看了一下ftp的协议,发现ftp有主动模式和被动模式.在服务端开21端口是让客户端进来,并没有出去的端口,还在服务端开启出 ...
- 11gR2数据库日志报错:Fatal NI connect error 12170、
11gR2数据库日志报错:Fatal NI connect error 12170.TNS-12535.TNS-00505 [问题点数:100分,结帖人MarkIII] 不显示 ...
- [你必须知道的.NET]第三十三回,深入.NET 4.0之,Lazy<T>点滴
发布日期:2009.10.29 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 对象的创建方式,始终代表了软件工业的生产力方向,代表了先进软件技 ...
- poj 1678 I Love this Game!
思路:这题和博弈论的关系不大,主要是DP.记忆化搜索即可!!! 取的数一定是大于0的,所以将负数去掉!! 代码如下: #include<iostream> #include<cstd ...
- CSS3做小三角形
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAXgAAAA2CAIAAABC2hVZAAAgAElEQVR4nKzcd3cbV57web+1p20FW8
- http://blog.163.com/zhangmihuo_2007/blog/static/27011075201392685751232/
http://blog.163.com/zhangmihuo_2007/blog/static/27011075201392685751232/
- adt导入已经存在于workspace中的项目
场景: Eclipse中某android项目被delete,但是并未勾选“delete project contents from disk(cannot be undone)”.删除后,下次再想打开 ...
- Dice chrone execise
def score(dices_input): count = {}.fromkeys(range(1, 7), 0) points = 0 for dice_side in dices_input: ...