The Blocks Problem

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

相关知识:

  若a是一个vector,则:

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

    a.resize():改变大小

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

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

  1. #include<cstdio>
  2. #include<string>
  3. #include<vector>
  4. #include<iostream>
  5. using namespace std;
  6.  
  7. const int maxn=;
  8. int n;
  9. vector<int> pile[maxn];//每个pile[i]是一个vector
  10.  
  11. //找木块a所在的pile和height,以引用的形式返回调用者
  12. void find_block(int a,int &p,int &h){
  13. for(p=;p<n;p++)
  14. for(h=;h<pile[p].size();h++)
  15. if(pile[p][h]==a) return;
  16. }
  17.  
  18. //把第p堆高度为h的木块上方的所有木块移回原位
  19. void clear_above(int p,int h){
  20. for(int i=h+;i<pile[p].size();i++){
  21. int b=pile[p][i];
  22. pile[b].push_back(b);//把木块b放回原位
  23. }
  24. pile[p].resize(h+);//pile只应保留下标0~h的元素
  25. }
  26.  
  27. //把第p堆高度为h及其上方的木块整体移动到p2堆的顶部
  28. void pile_onto(int p,int h,int p2){
  29. for(int i=h;i<pile[p].size();i++)
  30. pile[p2].push_back(pile[p][i]);
  31. pile[p].resize(h);
  32. }
  33.  
  34. void print(){
  35. for(int i=;i<n;i++){
  36. printf("%d:",i);
  37. for(int j=;j<pile[i].size();j++)
  38. printf(" %d",pile[i][j]);
  39. printf("\n");
  40. }
  41. }
  42.  
  43. int main(){
  44. int a,b;
  45. cin>>n;
  46. string s1,s2;
  47. for(int i=;i<n;i++)
  48. pile[i].push_back(i);
  49. while(cin>>s1&&s1!="quit"){
  50. cin>>a>>s2>>b;
  51. if(s1=="quit") break;
  52. int pa,pb,ha,hb;
  53. find_block(a,pa,ha);
  54. find_block(b,pb,hb);
  55. if(pa==pb) continue;//非法指令
  56. if(s2=="onto") clear_above(pb,hb);
  57. if(s1=="move") clear_above(pa,ha);
  58. pile_onto(pa,ha,pb);
  59. }
  60. print();
  61. return ;
  62. }

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. pig-csm 7.9修改记录

    PigCms\Lib\Action\System\UsersAction.class.php 存在页面广告跳转 bbs.go _pe.cn的问题 tpl\Home\weimob\public_head ...

  2. 9.centos7 安装mysql

    sudo yum install libaio # 安装依赖包 检查 MySQL 是否已安装 sudo yum list installed | grep mysql 也可以通过命令 rpm -qa| ...

  3. 【转帖】Istio是啥?一文带你彻底了解!

    Istio是啥?一文带你彻底了解! http://www.sohu.com/a/270131876_463994 原始位置来源: https://cizixs.com 如果你比较关注新兴技术的话,那么 ...

  4. DAO语句如何定义属性类型

    字体设置:代码 14px 文字 幼圆 15px public interface IAddressDAO { //添加地址 public boolean doCreate(Address addres ...

  5. 南昌网络赛C.Angry FFF Party

    南昌网络赛C.Angry FFF Party Describe In ACM labs, there are only few members who have girlfriends. And th ...

  6. spark教程(16)-Streaming 之 DStream 详解

    DStream 其实是 RDD 的序列,它的语法与 RDD 类似,分为 transformation(转换) 和 output(输出) 两种操作: DStream 的转换操作分为 无状态转换 和 有状 ...

  7. docker学习笔记之把容器commit成镜像

    docker提供了两种镜像制作的方式,提高了使用的灵活性: 1.可以将更改后的容器提交,制作成镜像(这是接下来要说明的) 2.通过Dockerfile来制作镜像 下面通过一个例子来展示方法1. 本地有 ...

  8. Kafka网络模型

    摘要:很多人喜欢把RocketMQ与Kafka做对比,其实这两款消息队列的网络通信层还是比较相似的,本文就为大家简要地介绍下Kafka的NIO网络通信模型,通过对Kafka源码的分析来简述其React ...

  9. Scala学习七——包和引入

    一.本章要点 包也可也可以像内部类那样嵌套 包路径不是绝对路径 包声明链x.y.z并不自动将中间包x和x.y变成可见 位于文件顶部不带花括号的包声明在整个文件范围内有效 包对象可以持有函数和变量 引入 ...

  10. vue中修改数组,dom未更新的问题

    vue中我们会频繁操作各种数据,但有时候发现修改完数据以后,dom并未更新? 比如有一个数组对象: obj = [{'name': 'joy'},{'name': 'bowen'}] 我要循坏插入某个 ...