20170302-學生排隊-CCF
問題描述
試題編號: | 201703-2 |
試題名稱: | 學生排隊 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: | 問題描述 體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入佇列。 輸入格式 輸入的第一行包含一個整數n,表示學生的數量,學生的學號由1到n編號。 輸出格式 輸出一行,包含n個整數,相鄰兩個整數之間由一個空格分隔,表示最終從前向後所有學生的學號。 樣例輸入 8 樣例輸出 1 2 4 3 5 8 6 7 評測用例規模與約定 對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 1000,所有移動均合法。 |
題解:用vector 模擬佇列
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<vector> using namespace std; //const int N=1005; vector<int>que; int n,m,p,q; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { que.push_back(i); } vector<int>::iterator it; scanf("%d",&m); for(int i=1;i<=m;i++) { scanf("%d%d",&p,&q); int pos=1; for(it=que.begin();it!=que.end();it++) { if(*it==p){ // cout<<*it<<endl; break; } pos++; } //cout<<*it<<endl; if(q>0){ que.insert(it+q+1,p); it=que.begin();///因erase造成迭代器失效,需重新設定?這是疑問 que.erase(it+pos-1); } if(q<0) { que.insert(it+q,p); it=que.begin(); que.erase(it+pos); } } for(it=que.begin();it!=que.end();++it) { cout<<*it<<" "; } return 0; }