UVa101 The Blocks Problem(不定长数组vector)
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)的更多相关文章
- 【OI】C++STL 不定长数组 vector
Vector 本来是向量的意思,只不过在用法上类似于一个不限长度的数组. 定义语法:vector<数据类型> 名称; 一.头文件:<vector> (bits/stdc++请忽 ...
- 不定长数组 Vector的 应用
#include<cstdio> #include<vector> using namespace std; vector<int>a; int main() { ...
- (ACM模板)不定长数组vector
#include<iostream> #include<cstdio> #include<vector> #include<algorithm> usi ...
- (STL初步)不定长数组:vector
STL是指C++的标准模板库.(存储着一些常用的算法和容器) vector是一个不定长数组.它把一些常用的操作”封装“在vector类型内部. 例如,a是一个vector.1对元素的操作有,可以用a. ...
- 【算法专题】工欲善其事必先利其器—— C++ STL中vector(向量/不定长数组)的常用方法总结
#include<iostream> #include<cstdio> #include<string> #include<vector>//不定长数组 ...
- STL之vector(不定长数组)
vector就是一个不定长数组,另外它把一些常用操作“封装”在了vector类型内部.例如,若a是一个vector,可以用a.size()读取它的大小,a.resize()改变大小,a.push_ba ...
- C++如何返回不定长数组
起初遇到这个问题的时候便得知无法返回,那么为了达到相同的目的,该怎么办呢? 第一个想法便是 int * void() { int * want = new int[size]; //......do ...
- C语言格式化输入不定长数组
先随便写写,有空再整理. 直接贴代码 #include <stdio.h> #include <stdlib.h> //从一行标准输入中格式化输入一个不定长数组 void in ...
- 【STL初步】不定长数组:vector + 集合:set + 映射:map
一.vector 为了节省空间,有时我们会使用动态数组vector. 定义动态数组 vector<类型名>变量名 vector<int>que //定义que为一个int类型的 ...
随机推荐
- web安全checklist
web安全漏洞场景分析 输入输出检验不充分 设计缺陷 环境缺陷
- 《机器学习实战(基于scikit-learn和TensorFlow)》第七章内容学习心得
本章主要讲述了“集成学习”和“随机森林”两个方面. 重点关注:bagging/pasting.boosting.stacking三个方法. 首先,提出一个思想,如果想提升预测的准确率,一个很好的方法就 ...
- 【并行计算-CUDA开发】CUDA并行存储模型
CUDA并行存储模型 CUDA将CPU作为主机(Host),GPU作为设备(Device).一个系统中可以有一个主机和多个设备.CPU负责逻辑性强的事务处理和串行计算,GPU专注于执行高度线程化的并行 ...
- 9.centos7 安装mysql
sudo yum install libaio # 安装依赖包 检查 MySQL 是否已安装 sudo yum list installed | grep mysql 也可以通过命令 rpm -qa| ...
- JS中的迭代
for each...in 使用一个变量迭代一个对象的所有属性值.对于每一个属性值,有一个指定的语句块被执行. 作为ECMA-357(E4X)标准的一部分,for each...in语句已被废弃,E4 ...
- 函数try{}
语法 函数try块是一种函数体的替代语法形式,是函数定义的一部分 try构造函数初始化器 复合语句 处理块序列 (1)构造函数初始化器 - 成员初始化器列表,只在构造函数允许 (2)复合语句 - 花括 ...
- (0)c++入门——认识指针与数组——指针即是内存中地址。
初识指针 首先需要了解一个概念,计算机的内存(或者说是寄存器)都是有地址的. <c++ primer plus>一书P37中提到这样一个概念:为把信息存储在计算机中,程序必须记录3个基本属 ...
- TIPTOP之分割split函数方法、getIndexOf、subString、replace、临时表创建;
范例(cnmq001): 原:每次查询都把数据全部查询到临时表后再筛选: 现:查询到临时表的时候,增加可行的筛选条件,再二次筛选临时表的数据,进行优化: 1)临时表创建: PRIVATE FUNCTI ...
- 怎样使用 ssh 命令远程连接服务器?
以 Git Bash 和 阿里云 ECS云服务器 为例, 想要进行远程连接, 可以使用 ssh 用户名@服务器IP 进行连接. 如下: 注意: 1. 密码输入时是没有提示的 2. root 是超级管理 ...
- opencv ORB各参数的含义
ORB中有很多参数可以设置,在OpenCV中它可以通过ORB来创建一个ORB检测器. ORB::ORB(int nfeatures=500, float scaleFactor=1.2f, int n ...