CCFCSP 201703-2 学生排队(100score)

题目来源于CCFCSP


在这里插入图片描述


思路分析

巧妙运用C++ STL即可简便的解决问题。

  1. 使用vector进行数据的存储。
  2. 然后使用find函数进行数字位置的查找
  3. 根据找到的位置和q的正负值,决定两种插入方式,因为inset函数每次插入在所给的位置之前。
  4. 然后再删除之前旧的值所在的位置的元素即可。

代码分析

//201703-2 学生排队
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> num;
int main()
{
    
    
	int n;    //人数
	cin >> n;
	int m;    //次数
	cin >> m;
	//学号对应
	for (int i = 1; i <= n; ++i)
		num.push_back(i);
	int p,q;
	for (int i = 1; i <= m; ++i) {
    
    
		cin >> p >> q;
		vector<int>::iterator it = find(num.begin(), num.end(), p);
		if (q > 0) {
    
    
			num.insert(it + q + 1, p);
			num.erase(it);
		}
		else {
    
    
			num.insert(it + q, p);
			auto it_2 = find(num.rbegin(), num.rend(),p);
			num.erase((++it_2).base());
		}
	}
	for (auto it : num)
		cout << it << " ";
	return 0;
}

测试结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44116998/article/details/108475144