洛谷 U136244 反复横跳
洛谷 U136244 反复横跳
题目背景
SeawaySeawa**y喜欢反复横跳。并且,为了加强数学成绩,他喜欢在一群数上反复横跳。
题目描述
一开始,SeawaySeawa**y横跳的数列并没有数。现在,SeawaySeawa**y要开始横跳。他在横跳的过程中会产生以下几种操作:
1 x 向横跳数列的末尾加入一个数x
2 询问当前横跳数列的首元素和尾元素,如果当前数列为空,则输出0 0。
3 询问当前横跳数列的长度。
4 x在横跳数列的末尾删除x个元素。
5 询问当前横跳数列是否为空,若是,输出1,若不是,输出0。
6 清空当前横跳数列。
7 x询问当前横跳数列的第x数为多少。
输入格式
输入的第一行有一个整数NN,代表SeawaySeawa**y横跳的次数。接下来的NN行,每行描述一个横跳操作。操作格式如题目所示。
输出格式
回答每个询问操作。并且,在所有横跳操作结束之后,输出这个横跳数列.
命题背景:
想练一下STL语法。然后出了这套水水的模板题。
题解:
用vector。A
代码:
#include<cstdio>
#include<vector>
using namespace std;
int n;
vector<int> v;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int opt,x;
scanf("%d",&opt);
if(opt==1)
{
scanf("%d",&x);
v.push_back(x);
}
else if(opt==2)
{
if(v.empty())
printf("0 0\n");
else
printf("%d %d\n",v.front(),v.back());
}
else if(opt==3)
printf("%d\n",v.size());
else if(opt==4)
{
scanf("%d",&x);
while(x--)
v.pop_back();
}
else if(opt==5)
printf("%d\n",v.empty());
else if(opt==6)
v.clear();
else
{
scanf("%d",&x);
printf("%d\n",v[x-1]);
}
}
for(int i=0;i<v.size();i++)
printf("%d ",v[i]);
return 0;
}