CCF 201703 2(學生排隊)

2021-10-02 18:16:24 字數 3086 閱讀 1911

一:問題

1.問題描述

體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入佇列。

例如,下面給出了一組移動的例子,例子中學生的人數為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。

小明記錄了所有調整的過程,請問,最終從前向後所有學生的學號依次是多少?

請特別注意,上述移動過程中所涉及的號碼指的是學號,而不是在隊伍中的位置。在向後移動時,移動的距離不超過對應同學後面的人數,如果向後移動的距離正好等於對應同學後面的人數則該同學會移動到佇列的最後面。在向前移動時,移動的距離不超過對應同學前面的人數,如果向前移動的距離正好等於對應同學前面的人數則該同學會移動到佇列的最前面。

2.格式

輸入格式

輸入的第一行包含乙個整數n,表示學生的數量,學生的學號由1到n編號。

第二行包含乙個整數m,表示調整的次數。

接下來m行,每行兩個整數p, q,如果q為正,表示學號為p的同學向後移動q,如果q為負,表示學號為p的同學向前移動-q。

輸出格式

輸出一行,包含n個整數,相鄰兩個整數之間由乙個空格分隔,表示最終從前向後所有學生的學號。

3.測試

樣例輸入83

3 28 -3

3 -2

樣例輸出

1 2 4 3 5 8 6 7

4.評測用例規模與約定

對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 1000,所有移動均合法。

二:理解

例子解釋即可明白題意:

1 2 3 4 5 6 7 8

移動1(3 2)

1 2 4 5 3 6 7 8

移動2(8 -3)

1 2 4 5 8 3 6 7

移動3(3 -2)

1 2 4 3 5 8 6 7

方法:可以用陣列儲存,然後暴力來做;

也可以用vector,這裡面有很多操作函式:

1.對於vector的宣告與初始化:

vector<

int>num;

for(i=

0; i) num.

push_back

(i+1);

//開始初值是按著順序排著的

2.了解兩個vector的操作函式:

①.刪除vector中的數:

注:刪除這個數之後,這個數之後的數都會程前(前移)

num.

erase

(num.

begin()

+i);

//即刪除num[i]

刪除vector中的num[1] – num[3]:

num.

erase

(num.

begin()

+1,num.

begin()

+3);

②.插入數到vector中:

注:插入函式只是單純的將數插入到vector中,不會覆蓋原有的數。就是原來的num[1]到了num[2]的位置,後面的數依次後移。

num.

insert

(num.

begin()

+1,5

);//就是令num[1] = 5;

三:**

#include

#include

#include

using

namespace std;

intmain()

for(i=

0; i) cout << num[i]

<<

" ";

return0;

}

第二次**:

重要的就是這兩個函式。

刪除stl向量的vector函式erase();刪除後,後邊的會自動往前移動。比如,刪掉了第二個數,從第二個數往後的數都往前移。

插入元素,就是插入到****就是這個數,然後不會覆蓋這個位置的數,這些數會往後移。

num.

erase

(num.

begin()

+i, num.

begin()

+i+1);

num.

insert

(num.

begin()

+i+q, p)

;

#include

#include

#include

using

namespace std;

vector<

int>num;

intmain()

}}for(

int i=

0; i) cout << num[i]

<<

" ";

return0;

}

CCF 201703 2 學生排隊

問題描述 試題編號 201703 2 試題名稱 學生排隊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距...

CCF201703 2 學生排隊

問題描述 體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入佇列。例如,下面給出了一組移動的例子,例子中學生的人數為8人。0 初始佇列中學生的學號依次為1,2,3,4...

CCF 201703 2 學生排隊

問題描述 體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入佇列。例如,下面給出了一組移動的例子,例子中學生的人數為8人。0 初始佇列中學生的學號依次為1,2,3,4...