CCF认证 20170302 学生排队

在这里插入图片描述
思路:简单模拟;list为双向循环链表,插入删除时间复杂度为O(1)

#include <bits/stdc++.h>
using namespace std;
list<int>l;//存储学号的链表
int main() {
	int n,m;cin>>n>>m;
	for(int i=1;i<=n;i++)l.push_back(i);
	while(m--){
		int p,q;cin>>p>>q;
		list<int>::iterator i=l.begin();
		while(*i!=p)++i;//指针移动到编号为p的元素处
		i=l.erase(i);//删去并返回指针
		while(q<0){//移动指针
			--i;++q;
		}
		while(q>0){
			++i;--q;
		}
		l.insert(i,p);//插入
	}
	for(list<int>::iterator i=l.begin();i!=l.end();++i)
		cout<<*i<<' ';
	return 0;
}
发布了99 篇原创文章 · 获赞 44 · 访问量 5510

猜你喜欢

转载自blog.csdn.net/weixin_44413191/article/details/103465184