hjz 的陣列初始時有 n 個元素。他可以把乙個位置上的數加上或減去乙個固定的
數 x。
一天 ljz 和 hzy 來 hjz 家玩。ljz 突發奇想,提出了乙個問題:如何在給定的
操作步數內最小化陣列所有元素的乘積呢?
hjz 百思不得其解,但是他想博得 hzy 的好感,就把這個問題交給你啦 ~
由於最小乘積可能很小,hjz 只需要你給出
. 最 . 小 . 乘 . 積 . 對 10^9 + 7
. 取 . 模的結果。
. 請 . 注 . 意 . 一 . 個 . 數 . 對 p . 取 . 模 . 的 . 結 . 果 . 一 . 定 . 是 . 非 . 負 . 數, . 即 . 你 . 輸 . 出 . 的 . 結 . 果 ans
. 要 . 滿 . 足 0 ≤ ans < 10^ 9 + 7 。
輸入格式:
從檔案 array.in 中讀入資料。
第一行三個整數 n,k, x 分別表示陣列元素個數、最多操作次數和每次操作的數。
第二行 n 個整數 a 1 ,a 2 ,...,a n 表示陣列初始時的元素。
輸出格式:
輸出到檔案 array.out 中。
一行乙個在 [0,10 9 + 7) 範圍內的整數,表示最小乘積的絕對值對 10 9 + 7 取模的
結果。輸入樣例#1:
3 2 75 4 2
輸出樣例#1:
999999732【樣例 1 解釋】
最多可以進行兩次操作,每次把乙個位置 +7 或 −7 。
最優策略是將陣列第二個元素 +7 ,第三個元素 −7 ,得到新的陣列 5 11 − 5 ,乘
積為 5 × 11 × (−5) = −275 ,模 10 9 + 7 的結果是 999999732 。
輸入樣例#2:
5 3 15 4 3 5 5
輸出樣例#2:
0【樣例 2 解釋】
只能把乙個位置 +3 或 −3 ,把第三個位置 −3 最優,乘積為 0 。
【子任務】
對於所有測試點,1 ≤ n,k ≤ 2 × 10^5 ,1 ≤ x ≤ 10^9 ,|a i | ≤ 10^9 。
分析:資料很大,不可能dp,稍微做過一點貪心題的人能夠一眼看出這道題就是用貪心做,但是具體怎麼貪心比較難想,如果我們能讓乘積變成負數是最好的,如果當前的乘積是正數,那麼我們要先用最少的步數讓乘積變成負數,這個時候操作絕對值最小的數讓它變成符號相反的數就能使乘積變成負數了.
要使每次操作的貢獻最大,肯定是操作絕對值最小的數,如果絕對值最小的數是正數,就讓他增加x,否則就讓它減少x,乘積還是負數,而且每一次的貢獻是最大的,所以答案一定是最優的,每次找絕對值最小的數用優先佇列.
需要注意對於0的處理.
#include #include#include
#include
#include
#include
#include
using
namespace
std;
const
long
long mod = 1000000007
;long
long n, k, x,ans = 1
,cnt;
priority_queue
long> q1; //
存負數priority_queue long, vectorlong>, greaterlong> >q2; //
存正數void
jian()
}q2.push(y);
}void
jia()
}q1.push(y);
}int
main()
else
q2.push(t);
}//先讓乘積變成負數
if (cnt % 2 == 0
)
for (int i = 1; i <= k; i++)
else
}while (!q1.empty())
while (!q2.empty())
while (ans < 0
) ans +=mod;
printf(
"%lld\n
", ans);
return0;
}
常州模擬賽d8t2 繪畫
分析 考慮記錄每個座標上每個顏色出現了幾次,並由此算出每個顏色 在這個座標上的貢獻。答案肯定是原圖的答案扣去矩形的答案,再加 上那個矩形同種顏色的貢獻,這裡的答案指的是 dis.我們先要記錄每個顏色在各個位置出現的次數,因為每一次都是區間操作嘛,所以我們用二維差分可以很好地維護,字首和求出出現的次數...
常州模擬賽d5t1 journalist
分析 出題人喪心病狂卡spfa.只能用dijkstar 堆優化.主要的難點是字典序的處理上,乙個想法是在做最短路的時候處理,邊鬆弛邊記錄,比個大小記錄最佳答案.具體的思路大概和最短路計數差不多,當遇到d u w i d v 是,說明到d v 有兩條最短路了,更新一下答案。但是這樣效率太低了,每一次鬆...
常州模擬賽d2t3 小X的佛光
平日裡最喜歡做的事就是蒸發學水。題目描述 小 x 所在的城市 x 城是乙個含有 n 個節點的無向圖,同時,由於 x 國是一 個發展中國家,為了節約城市建設的經費,x 國首相在建造 x 城時只建造 n 1 條邊,使得城市的各個地點能夠相互到達。小 x 計畫蒸發 q 天的學水,每一天會有一名學水從 a ...