洛谷 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
");
            else
                printf("%d %d
",v.front(),v.back());
        }
        else if(opt==3)
            printf("%d
",v.size());
        else if(opt==4)
        {
            scanf("%d",&x);
            while(x--)
                v.pop_back();
        }
        else if(opt==5)
            printf("%d
",v.empty());
        else if(opt==6)
            v.clear();
        else
        {
            scanf("%d",&x);
            printf("%d
",v[x-1]);
        }
    }
    for(int i=0;i<v.size();i++)
        printf("%d ",v[i]);
    return 0;
}
原文地址:https://www.cnblogs.com/fusiwei/p/13859042.html