給定n個整數a1, a2, … an。請你從中選出k個數,使其乘積最大。
請你求出最大的乘積,由於乘積可能超出整型範圍,你只需輸出乘積除以1000000009的餘數。
注意,如果x<0, 我們定義x除以1000000009的餘數是負(-x)除以1000000009的餘數。
即:0-((0-x) % 1000000009)
第一行包含兩個整數n和k。
以下n行每行乙個整數ai。
對於40%的資料,1 <= k <= n <= 100
對於60%的資料,1 <= k <= 1000
對於100%的資料,1 <= k <= n <= 100000 -100000 <= ai <= 100000
乙個整數,表示答案。
5 3-100000
-10000
2100000
10000
再例如:
5 3-100000
-100000
-2-100000
-100000
-999999829
資源約定:
峰值記憶體消耗(含虛擬機器) < 256m
cpu消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。
注意:main函式需要返回0;
只使用ansi c/ansi c++ 標準;
不要呼叫依賴於編譯環境或作業系統的特殊函式。
所有依賴的函式必須明確地在原始檔中 #include
不能通過工程設定而省略常用標頭檔案。
提交程式時,注意選擇所期望的語言型別和編譯器型別。
貪心策略:判斷需要從n個數字中取出的k個數字是否是偶數
需要將所有的資料提前排序
if(n-count(0) < k) 直接輸出0即可
偶數:兩個數兩個數的計算,頭尾進行比較,取大數進行相乘
奇數:取a[n-1] 判斷是否為負數
負數:從後向前進行計算
正數:和偶數的計算方法一樣
#include #include #include #define mod 1000000009
#define max 100005
typedef long long ll;
using namespace std;
int a[max];
int main()
}ll ans = 1;
sort(a, a+n);
if(n-k < numzero)
if(k%2 == 0)else
k -= 2;
}}elseelse
k -= 2;
}}else}}
printf("%lld\n", 0-((0-ans)%mod));
return 0;
}
2023年藍橋杯C C 組B組第二題
include includeint a 30 int fun1 int num for int j last printf n if getasynckeystate 48 sum if j 29 if go 0 if k 27 a k 0 else if go 1 else if go 2 把剩...
2023年藍橋杯B組c c 第八題詳解
小明維護著乙個程式設計師論壇。現在他收集了乙份 點讚 日誌,日誌共有n行。其中每一行的格式是 ts id 表示在ts時刻編號id的帖子收到乙個 贊 現在小明想統計有哪些帖子曾經是 熱帖 如果乙個帖子曾在任意乙個長度為d的時間段內收到不少於k個讚,小明就認為這個帖子曾是 熱帖 具體來說,如果存在某個時...
2023年藍橋杯預賽第十題加密
題目 一種playfair密碼變種加密方法如下 首先選擇乙個金鑰單詞 稱為pair 字母不重複,且都為小寫字母 然後與字母表中其他字母一起填入至乙個5x5的方陣中,填入方法如下 1.首先按行填入金鑰串。2.緊接其後,按字母序按行填入不在金鑰串中的字母。3.由於方陣中只有25個位置,最後剩下的那個字母...