信息奥赛题解|顺序表的删除
🚀 题目浏览
【题目描述】
对一个线性表进行删除操作。
【输入】
输入存在多组数据,以 EOF 结束。数据组数不超过 $10$ 组。
第一行有一个整数 $n\ (1\le n\le 9000)$,表示线性表的大小;
第二行有 $n$ 个整数,分别是 $list_1,list_2,\cdots,list_n$。
第三行有一个整数 $q$,表示 $q$ 次删除操作,接下来 $q$ 行,每行有一个整数 $k$,表示删除线性表中第 $k$ 个元素。
【输出】
对于每次删除操作输出一行,如果 $k$ 不合法,输出 $-1$, 否则输出删除的元素。
【输入样例】
5
3 2 1 5 4
3
5
5
2
【输出样例】
4
-1
2
☘️ 题解分析
STL容器 vector
的使用。
🧑🏻💻 C++ 代码
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n, tmp, q, k;
int main() {
ios::sync_with_stdio(false); //cin读入优化
cin.tie(0);
while (cin >> n) {
// 用vector存储线性表
vector<int> v;
// 存入元素
for (int i = 1; i <= n; i++) {
cin >> tmp;
v.push_back(tmp);
}
// q次删除
cin >> q;
while (q--) {
cin >> k;
// k不合法
if (k < 1 || k > v.size()) cout << -1 << endl;
else {
// k合法,输出并删除第k个元素
cout << v[k - 1] << endl;
v.erase(v.begin() + k - 1);
}
}
}
return 0;
}