數袋鼠好有趣

2021-08-08 00:27:44 字數 1537 閱讀 6478

這個題目需要將袋鼠按照體型從大到小排序之後,將前一半體型較大的與後面一半體型較小的比較,如果前者是後者體型的兩倍(或更大)就將袋鼠的數目減一,最後輸出剩餘袋鼠數量

這時我用的幾組測試資料:

9 8 6 4 3 1 輸出 3

9 4 1 1 1 輸出3

有n只袋鼠。每只袋鼠的大小用乙個整數表示。乙隻小袋鼠能裝進乙隻大袋鼠的條件是,大袋鼠的大小至少是小袋鼠的兩倍。

每只大袋鼠最多可以裝乙隻袋鼠。小袋鼠被裝進大袋鼠之後就不能再裝其它的袋鼠了。

小袋鼠被裝進大袋鼠之後就不能被我們看見了。請找出乙個裝袋鼠的方案,使得被看見的袋鼠最少。

input

單組測試資料。 

第一行包含乙個整數n(1≤n≤5*10^5)。 

接下來n行,每行乙個整數si,表示第i只袋鼠的大小 (1≤si≤10^5)。

output

輸出乙個整數,即最少能看見的袋鼠數量。

sample input

825

7698

42

sample output

5
佇列實現:

#include#include#includeusing namespace std;

bool cmp(int a,int b)

int reco[500005]=;

int main()

sort(reco+1,reco+n+1,cmp);

queueq_max,q_min;

if(n&1)

num=n+1;

else

num=n;

for(i=1;i<=num/2;i++)

q_max.push(reco[i]);

for(;i<=n;i++)

q_min.push(reco[i]);

while(1)

if(q_max.empty()||q_min.empty())

break;

while(q_max.front()<2*q_min.front())

if(q_max.empty()||q_min.empty())

break;

} printf("%d",q_max.size()+q_min.size()+cnt);

return 0;

}

陣列實現:

#include#include#include#includeusing namespace std;

bool cmp(int a,int b)

int reco[500005]=;

int main()

sort(reco+1,reco+n+1,cmp);

num=n,ans=n;

if(num&1)

num++;

for(i=num/2+1,j=1;j<=num/2&&i<=n;i++)

} printf("%d",ans);

return 0;

}

1420 數袋鼠好有趣

有n只袋鼠。每只袋鼠的大小用乙個整數表示。乙隻小袋鼠能裝進乙隻大袋鼠的條件是,大袋鼠的大小至少是小袋鼠的兩倍。每只大袋鼠最多可以裝乙隻袋鼠。小袋鼠被裝進大袋鼠之後就不能再裝其它的袋鼠了。小袋鼠被裝進大袋鼠之後就不能被我們看見了。請找出乙個裝袋鼠的方案,使得被看見的袋鼠最少。input 單組測試資料。...

51Nod 1420 數袋鼠好有趣

有n只袋鼠。每只袋鼠的大小用乙個整數表示。乙隻小袋鼠能裝進乙隻大袋鼠的條件是,大袋鼠的大小至少是小袋鼠的兩倍。每只大袋鼠最多可以裝乙隻袋鼠。小袋鼠被裝進大袋鼠之後就不能再裝其它的袋鼠了。小袋鼠被裝進大袋鼠之後就不能被我們看見了。請找出乙個裝袋鼠的方案,使得被看見的袋鼠最少。input 單組測試資料。...

51nod 1420 數袋鼠好有趣

1420 數袋鼠好有趣 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 有n只袋鼠。每只袋鼠的大小用乙個整數表示。乙隻小袋鼠能裝進乙隻大袋鼠的條件是,大袋鼠的大小至少是小袋鼠的兩倍。每只大袋鼠最多可以裝乙隻袋鼠。小袋鼠被裝進大袋鼠之後就不能再...