CCF	2017-3-2 学生排队_CCF

CCF	2017-3-2 学生排队_学生排队_02

样例输入

8
3
3 2
8 -3
3 -2

样例输出

1 2 4 3 5 8 6 7

思路:移动过程中,涉及到元素在中间位置的插入和删除list容器是最佳选择;先遍历整个链表找到要移动的元素的位置,并将该元素删除,然后将迭代器进行递增递减运算(或者利用迭代器辅助函数advance),找到要移动之后的位置,将该元素插入。

notice:list的迭代器不支持+、- 运算符,但支持++、-- 运算符;

code:
 

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,m,id,move;
    list<int> Stu;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        Stu.push_back(i);
    }    
    while(m--)
    {
        cin>>id>>move;
        list<int>::iterator iter=find(Stu.begin(),Stu.end(),id);
        iter=Stu.erase(iter);//删除iter所指元素 返回迭代器指向下一个元素;
        advance(iter,move);//利用迭代器辅助函数向后移动move个坐标
        Stu.insert(iter,id);//移动后插入
    }
    list<int>::iterator iter;
    for(iter=Stu.begin();iter!=Stu.end();++iter)
        cout<<*iter<<" ";
    return 0;
}