小q的家裡養殖著一種肉食性的魚,缺少食物的時候它們還會自相殘殺,不過只有一條魚的體重至少是另一條的兩倍時,體重更重的魚才能吃掉另一條。
小q把魚兩兩一組裝到入沒有食物的魚缸(如果魚的數量是奇數則最後乙個魚缸內只有一條魚), 請問要怎麼分組最後魚的總數最少,求出此時魚的數量。
第一行包含乙個整數 nnn。
接下來 n
nn 行,每行乙個整數 s
is_i
si,表示第 i
ii 條魚的大小。
輸出乙個整數,即實驗後魚數量的最小值。
樣例1
825
7698
42
樣例2
512
345
樣例3
322
1
樣例1
5
樣例2
3
樣例3
2
樣例解釋
假設有 8
88 條魚體重分別是 2,5
,7,6
,9,8
,4,2
2,5,7,
6,9,
8,4,
2,那麼當分組情況為[2,
6][2
,7][
4,8]
[5,9
][2,6] [2,7] [4,8] [5,9]
[2,6][
2,7]
[4,8
][5,
9]時,前三組大魚都吃掉了小魚,最後一組的兩條魚都活了下來,此時所剩魚的數量最少,為 5
55 條
資料範圍
對於 45
%45\%
45% 的資料,1≤n
≤20,1
≤si≤
1001≤n≤20,1≤si≤100
1≤n≤20
,1≤s
i≤10
0對於 65
%65\%
65% 的資料,1≤n
≤1000
1≤n≤1000
1≤n≤10
00對於 100
%100\%
100%
的資料,1≤n
≤5e5
,1≤s
i≤1e
51≤n≤5e5,1≤si≤1e5
1≤n≤5e
5,1≤
si≤1
e5先排個序,然後把排好序的魚從中間分成兩份(若魚的數量是奇數則把中間的那條單獨放置
小的那份和大的那份依次比較,若大魚可以把小魚抹殺則減去一條魚,否則換一條更大的魚繼續比較即可
#include
#include
#include
using
namespace std;
int n, x, y, a[
500005];
intmain()
printf
("%d"
, n - x +1)
;return0;
}
大魚吃小魚
有n條魚每條魚的位置及大小均不同,他們沿著x軸游動,有的向左,有的向右。游動的速度是一樣的,兩條魚相遇大魚會吃掉小魚。從左到右給出每條魚的大小和游動的方向 0表示向左,1表示向右 問足夠長的時間之後,能剩下多少條魚?input 第1行 1個數n,表示魚的數量 1 n 100000 第2 n 1行 每...
大魚吃小魚
有n條魚每條魚的位置及大小均不同,他們沿著x軸游動,有的向左,有的向右。游動的速度是一樣的,兩條魚相遇大魚會吃掉小魚。從左到右給出每條魚的大小和游動的方向 0表示向左,1表示向右 問足夠長的時間之後,能剩下多少條魚?input 第1行 1個數n,表示魚的數量 1 n 100000 第2 n 1行 每...
大魚吃小魚(棧)
有n條魚每條魚的位置及大小均不同,他們沿著x軸游動,有的向左,有的向右。游動的速度是一樣的,兩條魚相遇大魚會吃掉小魚。從左到右給出每條魚的大小和游動的方向 0表示向左,1表示向右 問足夠長的時間之後,能剩下多少條魚?input第1行 1個數n,表示魚的數量 1 n 100000 第2 n 1行 每行...