這個題目需要將袋鼠按照體型從大到小排序之後,將前一半體型較大的與後面一半體型較小的比較,如果前者是後者體型的兩倍(或更大)就將袋鼠的數目減一,最後輸出剩餘袋鼠數量
這時我用的幾組測試資料:
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
8257698
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只袋鼠。每只袋鼠的大小用乙個整數表示。乙隻小袋鼠能裝進乙隻大袋鼠的條件是,大袋鼠的大小至少是小袋鼠的兩倍。每只大袋鼠最多可以裝乙隻袋鼠。小袋鼠被裝進大袋鼠之後就不能再...