問題描述
體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入佇列。例如,下面給出了一組移動的例子,例子中學生的人數為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,所有移動均合法。
思路:思路比較簡單,主要是細節。
**:
n=int(input())
m=int(input())
a=for i in range(n):
b = [list(map(int, input().split())) for _ in range(m)]
for i in range(m):
p,q=b[i][0],b[i][1]
for j in range(n):
if p==a[j]:
if q>0:
for r in range(q):
a[j+r]=a[j+r+1]
a[j+q]=p
break
elif q<0:
for r in range(abs(q)):
a[j-r]=a[j-r-1]
a[j+q]=p
break
for k in a:
print(k,end=' ')
今天看了師哥的csdn,發現他寫的很棒!只用了10幾行的**,具體可參照:
我也照著師哥的思路(很簡單清晰)敲了一遍**:
n=int(input())
m=int(input())
a=[i+1 for i in range(n)]
b=[list(map(int,input().split())) for _ in range(m)]
for i in range(m):
p,q=b[i][0],b[i][1]
inde=a.index(b[i][0])
a.remove(p)
a.insert(inde+q,p)
for i in range(n):
print(a[i],end=' ')
主要是用了兩個函式,remove和insert。
1.沒有學到太多新的知識點,主要是在除錯邏輯。有一點想總結的是:
在之前的「ccf消除類遊戲」中總結過建立陣列的兩種方法:
方法一:
a=[*m for i in range(n)]
for i in range(n):
list=input().split()
for j in range(m):
方法二:
a=
for i in range(n):
現在有更簡單的方法三;
b = [list(map(int, input().split())) for _ in range(m)]
2.這是看了師哥的**學到的,要學會使用python庫中本來就有的函式。像之前的工資計算那題,用了math.ceil()就將80分變成了100分。簡單總結一下做到現在所用到過的函式:
2.1math.ceil()
向上取整
2.2排序
a.sort()
公升序
a.sort(reverse=true)
降序
a.sort(key=lambda x:x[0])
按對應的第幾個數排序
2.3刪除與插入
a.remove(數)
刪除a.insert(位置,數)
插入
2.4count()
計算相同的數出現的個數
CCF學生排隊
問題描述 體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入佇列。例如,下面給出了一組移動的例子,例子中學生的人數為8人。0 初始佇列中學生的學號依次為1,2,3,4...
ccf 學生排隊
時間消耗為介於mn和n 2之間 問題描述 體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入佇列。例如,下面給出了一組移動的例子,例子中學生的人數為8人。0 初始佇列...
CCF 學生排隊
試題編號 201703 2 試題名稱 學生排隊 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 體育老師小明要將自己班上的學生按順序排隊。他首先讓學生按學號從小到大的順序排成一排,學號小的排在前面,然後進行多次調整。一次調整小明可能讓一位同學出隊,向前或者向後移動一段距離後再插入...