1.vector
*初始化
& a=b;
& vector<>a();
& vector<>a={};
*相关函数
& size()访问长度
& [] 获取元素 (不安全)
& at() (安全)
& front() 获取首元
& back()尾元
& begin()迭代器首
& end() 尾
& rebegin 反向首
& rend 反向尾
& capacity()实际分配长度
& resize() 多退少补
& reserve () 预留空间
& swap()交换
& insret()插入
& push_back()尾插
& pop_back()尾删
& clear()清空
& sort()排序
& reverse()反转
& stable_sort()稳排
& lower_bound() 二分>=
& upper_bound()二分>
& unique()去重
& erase()删除
# 例题
洛谷P1135 奇怪的电梯
题目描述
呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 ii 层楼(1 \le i \le N1≤i≤N)上有一个数字 K_iKi(0 \le K_i \le N0≤Ki≤N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如: 3, 3, 1, 2, 53,3,1,2,5 代表了 K_iKi(K_1=3K1=3,K_2=3K2=3,……),从 11 楼开始。在 11 楼,按“上”可以到 44 楼,按“下”是不起作用的,因为没有 -2−2 楼。那么,从 AA 楼到 BB 楼至少要按几次按钮呢?
输入格式
共二行。
第一行为三个用空格隔开的正整数,表示 N, A, BN,A,B(1 \le N \le 2001≤N≤200,1 \le A, B \le N1≤A,B≤N)。
第二行为 NN 个用空格隔开的非负整数,表示 K_iKi。
输出格式
一行,即最少按键次数,若无法到达,则输出 -1
。
#include<bits/stdc++.h>
using namespace std;
struct tao{
int a,b,c,d;
}h[350];
int main(){
int n,m,s,q=1;
cin>>n>>m>>s;
vector<int>aa;
vector<int>v;
aa.push_back(s);
for(int i=1;i<=n;i++){
cin>>h[i].b;
h[i].a=i;
h[i].c=-1;
h[i].d=1;
}
while(aa.empty()==0){
if(h[m].c!=-1)
break;
for(int i=1;i<=n;i++){
for(int j=0;j<aa.size();j++){
if(h[i].d!=0 && (h[i].a+h[i].b==aa[j] || h[i].a-h[i].b==aa[j])){
h[i].c=q;
h[i].d=0;
v.push_back(h[i].a);
break;
}
}
}
if(v.empty()){
vector<int>().swap(aa);
break;
}
else{
q++;
aa=v;
vector<int>().swap(v);
}
}
if(m==s)
cout<<0;
else
cout<<h[m].c;
return 0;
}
这题可以用其他更好的方法,但本人是蒟蒻,只能暴力了,还望大佬们指教。