CCF学生排队
2020-03-07 12:09 legend聪 阅读(136) 评论(0) 编辑 收藏 举报这题如果考虑考虑用数组折腾会非常麻烦,如果想到用vector的insert函数和erase函数就会非常舒服的模拟出来。vt.erase(it)之后it就变成了野指针,所以要用it=erase(it),这样it就会自动指向下一个元素。
#include<cstdio> #include<iostream> #include<vector> #include<algorithm> #include<string.h> using namespace std; int main() { int n, k; cin >> n; getchar(); cin >> k; vector<int>vt; int i; for (i = 0; i < n; i++) { vt.push_back(i+1); } int s, p; vector<int>::iterator it = vt.begin(); while (k--) { cin >> s >> p; for (it=vt.begin(); it != vt.end(); it++) { if(*it==s) { it = vt.erase(it); vt.insert(it + p, s); break; } } } for (it = vt.begin(); it != vt.end(); it++) { cout << *it << ' '; } cout << endl; }