LG 大魚吃小魚 模擬

2021-10-10 02:42:46 字數 1636 閱讀 3371

小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行 每行...