問題描述
體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入佇列。
例如,下面給出了一組移動的例子,例子中學生的人數為8人。
0)初始佇列中學生的學號依次為1, 2, 3, 4, 5, 6, 7, 8;
1)第一次調整,命令為「3號同學向後移動2」,表示3號同學出隊,向後移動2名同學的距離,再插入到佇列中,新佇列中學生的學號依次為1, 2, 4, 5, 3, 6, 7, 8;
2)第二次調整,命令為「8號同學向前移動3」,表示8號同學出隊,向前移動3名同學的距離,再插入到佇列中,新佇列中學生的學號依次為1, 2, 4, 5, 8, 3, 6, 7;
3)第三次調整,命令為「3號同學向前移動2」,表示3號同學出隊,向前移動2名同學的距離,再插入到佇列中,新佇列中學生的學號依次為1, 2, 4, 3, 5, 8, 6, 7。
小明記錄了所有調整的過程,請問,最終從前向後所有學生的學號依次是多少?
請特別注意,上述移動過程中所涉及的號碼指的是學號,而不是在隊伍中的位置。在向後移動時,移動的距離不超過對應同學後面的人數,如果向後移動的距離正好等於對應同學後面的人數則該同學會移動到佇列的最後面。在向前移動時,移動的距離不超過對應同學前面的人數,如果向前移動的距離正好等於對應同學前面的人數則該同學會移動到佇列的最前面。
輸入格式
輸入的第一行包含乙個整數n,表示學生的數量,學生的學號由1到n編號。
第二行包含乙個整數m,表示調整的次數。
接下來m行,每行兩個整數p, q,如果q為正,表示學號為p的同學向後移動q,如果q為負,表示學號為p的同學向前移動-q。
輸出格式
輸出一行,包含n個整數,相鄰兩個整數之間由乙個空格分隔,表示最終從前向後所有學生的學號。
樣例輸入83
3 28 -3
3 -2
樣例輸出
1 2 4 3 5 8 6 7
評測用例規模與約定
對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 1000,所有移動均合法。
演算法設計:
採用stl中的list來做比較很好地實現插入刪除操作。要注意的是使用list::iterator it時it只能使用it++ 或it--不能使用it+b(b為乙個整數)。其中使用find()來查詢list中的元素例如 it=find(l.begin(),l.end(),a)查詢l這個鍊錶中的a這個數字返回乙個iterator型別的it,find()查詢時要加上#include
it=l.erase(it);//erase(it)返回刪除的那個位置 從刪除的那個位置it++就表示向後移動了乙個位置。就可以很容易的移動了幾個位置就在那個insert()插上幾個位置就可以了;
#include #include#includeusing namespace std;
int main()
cin>>m;
int a,b;
while(m--)
return 0;
}
總結:
algorithm標頭檔案下的find()函式可以用於查詢list vector 等容器中的元素,返回的是元素的位置,是iterator型別的;使用it=erase(it) 返回的被刪除的那個位置。
下列是將容器中的1 2 3 4 5中的3後移兩個位置。即 1 2 4 5 3。使用list也是同樣的操作。
#include #include #include #includeusing namespace std;
int main()
// 1 2 3 4 5
// 將3 後移動兩個位置 1 2 4 5 3
vector::iterator it;
it=find(v.begin(),v.end(),3);
it=v.erase(it);
for(int i=0;i<2;i++)
v.insert(it,3);
for(it=v.begin();it!=v.end();it++)
return 0;
}
20170302 學生排隊
問題描述 試題編號 201703 2 試題名稱 學生排隊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距...
ccf認證 學生排隊 編號201703 2
試題名稱 學生排隊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入佇列。例如,下面給出了一組移...
ccf認證 學生排隊 編號201703 2
試題名稱 學生排隊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入佇列。例如,下面給出了一組移...