The Blocks Problem

书上的一道例题,代码思路比较清晰,可以看懂。

相关知识:

  若a是一个vector,则:

    a.size():读取它的大小

    a.resize():改变大小

    a.push_back():向尾部添加元素

    a.pop_back():删除最后一个元素

#include<cstdio>
#include<string>
#include<vector>
#include<iostream>
using namespace std; const int maxn=;
int n;
vector<int> pile[maxn];//每个pile[i]是一个vector //找木块a所在的pile和height,以引用的形式返回调用者
void find_block(int a,int &p,int &h){
for(p=;p<n;p++)
for(h=;h<pile[p].size();h++)
if(pile[p][h]==a) return;
} //把第p堆高度为h的木块上方的所有木块移回原位
void clear_above(int p,int h){
for(int i=h+;i<pile[p].size();i++){
int b=pile[p][i];
pile[b].push_back(b);//把木块b放回原位
}
pile[p].resize(h+);//pile只应保留下标0~h的元素
} //把第p堆高度为h及其上方的木块整体移动到p2堆的顶部
void pile_onto(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);
} 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&&s1!="quit"){
cin>>a>>s2>>b;
if(s1=="quit") break;
int pa,pb,ha,hb;
find_block(a,pa,ha);
find_block(b,pb,hb);
if(pa==pb) continue;//非法指令
if(s2=="onto") clear_above(pb,hb);
if(s1=="move") clear_above(pa,ha);
pile_onto(pa,ha,pb);
}
print();
return ;
}

UVa101 The Blocks Problem(不定长数组vector)的更多相关文章

  1. 【OI】C++STL 不定长数组 vector

    Vector 本来是向量的意思,只不过在用法上类似于一个不限长度的数组. 定义语法:vector<数据类型> 名称; 一.头文件:<vector> (bits/stdc++请忽 ...

  2. 不定长数组 Vector的 应用

    #include<cstdio> #include<vector> using namespace std; vector<int>a; int main() { ...

  3. (ACM模板)不定长数组vector

    #include<iostream> #include<cstdio> #include<vector> #include<algorithm> usi ...

  4. (STL初步)不定长数组:vector

    STL是指C++的标准模板库.(存储着一些常用的算法和容器) vector是一个不定长数组.它把一些常用的操作”封装“在vector类型内部. 例如,a是一个vector.1对元素的操作有,可以用a. ...

  5. 【算法专题】工欲善其事必先利其器—— C++ STL中vector(向量/不定长数组)的常用方法总结

    #include<iostream> #include<cstdio> #include<string> #include<vector>//不定长数组 ...

  6. STL之vector(不定长数组)

    vector就是一个不定长数组,另外它把一些常用操作“封装”在了vector类型内部.例如,若a是一个vector,可以用a.size()读取它的大小,a.resize()改变大小,a.push_ba ...

  7. C++如何返回不定长数组

    起初遇到这个问题的时候便得知无法返回,那么为了达到相同的目的,该怎么办呢? 第一个想法便是 int * void() { int * want = new int[size]; //......do ...

  8. C语言格式化输入不定长数组

    先随便写写,有空再整理. 直接贴代码 #include <stdio.h> #include <stdlib.h> //从一行标准输入中格式化输入一个不定长数组 void in ...

  9. 【STL初步】不定长数组:vector + 集合:set + 映射:map

    一.vector 为了节省空间,有时我们会使用动态数组vector. 定义动态数组 vector<类型名>变量名 vector<int>que //定义que为一个int类型的 ...

随机推荐

  1. 二分查找算法C++实现

    /************************************************************************* > File Name: binary_se ...

  2. flask LOCAL线程隔离技术

    from threading import Thread from werkzeug.local import Local local = Local()#实例化一个线程隔离对象 request = ...

  3. C语言Ⅰ博客作业11

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-3/homework/10130 我在这个课程的 ...

  4. SQLite基础-3.语法与数据类型

    目录 一.SQLite语法 1. 大小写敏感性 2. 注释 3. SQLite语句 二. SQLite 数据类型 1. Boolean 数据类型 2. Date 与 Time 数据类型 一.SQLit ...

  5. 网站如何接入微信公众号JSAPI支付PHP版

    1.首先,我们要有一个微信公众号(分类类型有订阅号,服务号,企业号)我们的微信公众号一定是个服务号只有它才有微信支付接口.. 并且这个微信公众号一定要进行微信认证才能申请微信支付接口. 2.申请JSA ...

  6. JS实现点击查看密码功能,再次点击隐藏密码!

    <table border='1'> <tr> <td>aaaa</td> <td onclick="myFunction(this.i ...

  7. 【Havel 定理】Degree Sequence of Graph G

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2454 [别人博客粘贴过来的] 博客地址:https://www.cnblogs.com/debug ...

  8. springboot打包的jar项目,不需要安装jdk环境启动

    因为服务器上是JDK7,而springboot至少用JDK8才行,但是又因为是很老的项目,不是很清楚能不能换JDK8,有风险,因此选择以前项目用JDK7,而新的springboot用JDK8.步骤一: ...

  9. MySQL存储引擎InnoDB大量数据下的问题

    MySQL如果只有MyISAM一个引擎的话,那你们黑真的也有道理,但问题是InnoDB现在已经是MySQL默认的引擎,而且这个引擎综合能力很强,能用好这个引擎其实就已经能解决大多数需要数据库的业务逻辑 ...

  10. vs 2013 设置website项目端口

    vs 2015/2013 设置website项目端口 在web项目创建之后,当我想重新debug时,出现the port xxx is in use 错误. 经过netstat分析,发现占用此项目端口 ...