題目解析 培養魂靈

2021-10-05 02:34:11 字數 3358 閱讀 2282

此篇較長,為了節省篇幅,提前說一下哈,不是滿分**就不展開詳細講述了。

↓仔細看題↓

時間限制: 1000 ms 空間限制: 262144 kb

題目描述

今天小y準備選購一批魂靈。具體來說,這批魂靈共有n個,每乙個魂靈都具有乙個力量pi。小y特別喜歡 1 號魂靈,所以小 y一定會購買1號魂靈。

在購買完小y想要的魂靈之後,小y每天會分配b點魂力給魂靈們,每乙個魂靈得到的魂力則由它的力量值決定,假設所有購買的魂靈力量值總和為 sum,那麼i號魂靈得到的魂力則為(pi/sum)*b。

舉例而言,若小y購買的3個魂靈力量值分別為2、3、5,小y每天會分配5點魂力給它們,那麼它們每天得到的魂力就分別是1點、1.5點、2.5點。

同時,由於小y特別喜歡1號魂靈,所以小y要求 1 號魂靈每天得到的魂力值不低於 a。

現在小y想要知道他至少需要放棄多少只魂靈。

輸入

第一行三個整數n、b、a,含義見題面描述。

第二行包含n個整數pi,分別表示每個魂靈的力量值。

輸出

一行乙個整數,表示小y至少需要放棄多少只魂靈。

樣例輸入1

4 10 3

2 2 2 2

樣例輸入2

4 80 20

3 2 1 4

樣例輸入3

5 10 10

1000 1 1 1 1

樣例輸出

樣例輸出1

1樣例輸出2

0樣例輸出3

4資料範圍限制

對於30%的資料,n≤5。對於 60%的資料,n≤20。

對於100%的資料,n≤1000。

提示

在樣例1中,小y至少需要放棄 2~4 中的某乙個魂靈。

在樣例2中,1號魂靈得到的魂力足夠,小y不需要放棄魂靈。

在樣例3中,小y需要放棄 2~5 中的所有魂靈。

這道題目一開始做的時候,我沒有考慮周到,先看看零分**吧↓

//0分

#include

using

namespace std;

long

long n,b,a;

double k[

1001

],p[

1001

],s,mn=

-9999999

;int

main()

for(

int i=

1;i<=n;i++)}

if(k[1]

>=a)

else

}

這段**是我用了較少的時間做出來的第一版本,當時頭腦一熱,就先求出每只魂靈得到的魂力值,然後求出最小值,再看看需不需要拋棄,如果要就拋棄最小值的那只魂靈。結果分數出來,當時我就傻了,怎麼零分了呢?◔ ‸◔?

頓時我腦袋裡又閃過一絲想法,於是就有了接下來的n個12.5分**(這裡僅展示第乙個12.5分**)↓

#include

using

namespace std;

long

long n,b,a,s,p[

1001

],ans;

double k[

1001];

intmain()

for(

int i=

1;i<=n;i++)if

(k[1

]>=a)

sort

(k+2

,k+n+1)

;for

(int i=n;i>=

2;i--)}

cout

}

這份**我稍加修飾,先把除了第一只魂靈以外的其他魂靈得到的魂力值排個序,然後再依次拋棄,直到不需要拋棄為止。這份**我感覺好像對了,但是還是只拿了12.5分。

接下來看看我的25分**吧,這個是我的公升級版**,嗯,但是成績也不咋地。↓

//25

#include

using

namespace std;

long

long n,b,a,s,p[

1001

],ans;

double k[

1001];

intmain()

k[1]=

(p[1]*

1.0/s)

*b;//求出第一只魂靈得到的魂力值

for(

int i=

2;i<=n;i++

)else

if(k[i]

<

(a-k[1]

))else}if

(k[1

]>=a)

else

}

你肯定已經發現了,這份**漏洞極多,多到數不過來,天哪,太可怕了ヽ(*。>д<)o゜(具體解析看注釋)

不多說了,接下來,你猜我改對了嗎?然鵝,並沒有⊙﹏⊙‖∣,接下來我的37.5分**出爐了↓

#include

using

namespace std;

int temp1,ans,n,a,b,x,y,j,f[

1001

],temp2;

intmain()

if(x*

1.0/temp1*b>=a)

sort

(f+2

,f+n)

; y=n-1;

while

(x*1.0

/temp1*bcout

}

這份**不多解釋,就是25分**的公升級版而已,沒想到就多了12.5分。(__

) 嘻嘻

接下來,歷時兩天的ac**終於閃亮✧(≖ ◡ ≖✿)登場了↓

#include

using

namespace std;

int sum,ans,n,a,b,x,y,j,f[

1001

],maxn;

intmain()

if(x*

1.0/sum*b>=a)

sort

(f+2

,f+n+1)

;//排個序

y=n-1;

//目前魂靈數量

while

(x*1.0

/sum*bcout

}

(詳見注釋,不多解釋)

(第一次寫部落格,多多指教)

leetCode題目解析

給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8原...

CourseGrading 題目解析

問題描述 若某元素在一組數中比它大元素越多,則說明這個數在這組數的值就越小。現請你統計出陣列中的每個元素,數一數該陣列有多少個元素比它大。輸入形式 第一行 n 第二行 n個整數 輸出形式 n個整數,各數這之間有1個空格 樣例輸入 5 4 6 12 16 8 樣例輸出 4 3 1 0 2個人答案 in...

昨天的題目解析

no.1 linux系統中,使用者檔案描述符0表示 a.標準輸入裝置檔案描述符 b.標準輸出裝置檔案描述符 c.管道檔案描述符 d.標準錯誤輸出裝置描述符 答案 a 檔案描述符0 標準輸入裝置 檔案描述符1 標準輸出裝置 檔案描述符2 標準錯誤輸出裝置 no.2 設x和y是二叉樹中的任意兩個節點,若...