374 藍橋杯2018初賽 乘積最大

2021-10-05 01:33:14 字數 1421 閱讀 7575

374: [藍橋杯2018初賽]乘積最大

時間限制: 1 sec  記憶體限制: 256 mb

題目描述

給定n個整數a1, a2, ... an。請你從中選出k個數,使其乘積最大。 

請你求出最大的乘積,由於乘積可能超出整型範圍,你只需輸出乘積除以1000000009的餘數。 

注意,如果x<0, 我們定義x除以1000000009的餘數是負(-x)除以1000000009的餘數。

即:0-((0-x) % 1000000009)

輸入第一行包含兩個整數n和k。 

以下n行每行乙個整數ai。

1 <= k <= n <= 100000  -100000 <= ai <= 100000 

輸出乙個整數,表示答案。

樣例輸入

5 3 

-100000

-10000

2

100000

10000

樣例輸出
999100009
注意取模時得巨坑
1

/*2 首先我們知道 如果 k == n ,那麼就證明所有的數字是全部都選,

3 如果 k < n , 那麼就要思考怎樣去選擇了:

4 1.k 如果是偶數的話,選出來的結果一定是非負數 , 原因如下:

5 (1) # 負數的個數是偶數個的話,負負得正,那麼一定是非負數

6 (2) # 負數的個數如果是奇數個的話,那麼我們就只選偶數個絕對值最大的負數

7 2.k 如果是奇數個的話,

8 (1)# 所有的數字如果都是負數,那麼選出來的結果也一定都是負數

9 (2)# 否則的話,則一定至少有 1個非負數, 那麼我們將最大的數取出來, 此時要選的個數就是 k--,

10 # k-- 是偶數,那麼就又轉化為 k-- 是偶數的情況思考

1112

13 */

14 #include 15 #include 16

using

namespace std;

1718

using ll = long

long;

1920 constexpr size_t maxn = 1e5 + 5;

2122 ll mod = 1000000009;

23 ll a[maxn];

24int main()

25 39

while(k)

4748

else

52 k -= 2;

53 }

54 cout << res << endl;

55return 0;

56 }

374 藍橋杯2018初賽 乘積最大

374 藍橋杯2018初賽 乘積最大 時間限制 1 sec 記憶體限制 256 mb 題目描述 給定n個整數a1,a2,an。請你從中選出k個數,使其乘積最大。請你求出最大的乘積,由於乘積可能超出整型範圍,你只需輸出乘積除以1000000009的餘數。注意,如果x 0,我們定義x除以10000000...

藍橋杯2018初賽 乘積尾零

乘積尾零 題目描述 如下的10行資料,每行有10個整數,請你求出它們的乘積的末尾有多少個零?5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 9937 117...

藍橋杯2018初賽 全球變暖

題目描述 你有一張某海域nxn畫素的 表示海洋 表示陸地,如下所示 其中 上下左右 四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。由於全球變暖導致了海面上公升,科學家 未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰 上下左右四個相鄰畫素中有海洋 ...