CCF201703 Python題解

2022-09-23 01:02:07 字數 3182 閱讀 6472

原題連線:

試題編號:

201703-1

試題名稱:

分蛋糕時間限制:

1.0s

記憶體限制:

256.0mb

問題描述:

問題描述

小明今天生日,他有n塊蛋糕要分給朋友們吃,這n塊蛋糕(編號為1到n)的重量分別為a

1, a

2, …, an

。小明想分給每個朋友至少重量為k的蛋糕。小明的朋友們已經排好隊準備領蛋糕,對於每個朋友,小明總是先將自己手中編號最小的蛋糕分給他,當這個朋友所分得蛋糕的重量不到k時,再繼續將剩下的蛋糕中編號最小的給他,直到小明的蛋糕分完或者這個朋友分到的蛋糕的總重量大於等於k。

請問當小明的蛋糕分完時,總共有多少個朋友分到了蛋糕。

輸入格式

輸入的第一行包含了兩個整數n, k,意義如上所述。

第二行包含n個正整數,依次表示a

1, a

2, …, an

。輸出格式

輸出一個整數,表示有多少個朋友分到了蛋糕。

樣例輸入

6 92 6 5 6 3 5

樣例輸出

3樣例說明

第一個朋友分到了前3塊蛋糕,第二個朋友分到了第4、5塊蛋糕,第三個朋友分到了最後一塊蛋糕。

評測用例規模與約定

對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 10000,1 ≤ ai

≤ 1000。

題解:暴力吧,少年!最後如果不能保證大於k,也算分到了一個小朋友

1 n,k=input().split()

2 n,k=int(n),int(k)

34 cake=list(map(int, input().split()))

5 ss=0

6 ans=0

7for i in

range(n):

8 ans+=cake[i]

9if ans>=k:

10 ss+=1

11 ans=0

12elif ansand i==n-1:

13 ss+=1

14print(ss)

試題編號:

201703-2

試題名稱:

學生排隊

時間限制:

1.0s

記憶體限制:

256.0mb

問題描述:

問題描述

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

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

題解:得力於list刪除和插入,陣列index判斷思考清除(錘死自己)

1 n=int(input())

2 ans=[i for i in range(1, n+1)]

3 m=int(input())

4for i in

range(m):

5 p,q=map(int,input().split())

6 tmp1=ans.index(p)

7if tmp1+qand tmp1+q>=0:

8ans.remove(p)

9 ans.insert(tmp1+q,p)

10elif tmp1+q==n:

11ans.remove(p)

1213

14print('

'.join(map(str, ans)))

精簡版,上面的**有些贅餘而方便理解,下面是精簡

1 n=int(input())

2 m=int(input())

34 ans=[i for i in range(1,n+1)]

5 order=[list(map(int, input().split())) for _ in

range(m)]67

for i in

range(m):

8 tmp=ans.index(order[i][0])

9ans.remove(order[i][0])

10 ans.insert(tmp+order[i][1],order[i][0])

11print('

'.join(map(str, ans)))

view code

CCF 201703 4 地鐵修建 最小生成樹

題意 a市有n個交通樞紐,其中1號和n號非常重要,為了加強運輸能力,a市決定在1號到n號樞紐間修建一條地鐵。地鐵由很多段隧道組成,每段隧道連線兩個交通樞紐。經過勘探,有m段隧道作為候選,兩個交通樞紐之間最多隻有一條候選的隧道,沒有隧道兩端連線著同一個交通樞紐。現在有n家隧道施工的公司,每段候選的隧道...

CCF201512 Python題解

試題編號 201512 1 試題名稱 數位之和 時間限制 1 0s 記憶體限制 256 0mb 問題描述 問題描述 給定一個十進位制整數n,輸出n的各位數字之和。 輸入格式 輸入一個整數n。 輸出格式 輸出一個整數,表示答案。 樣例輸入 20151220 樣例輸出 13樣例說明 20151220的各位數...