Division 贪心,模拟 牛客练习赛95
鏈接:https://ac.nowcoder.com/acm/contest/11185/C
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 262144K,其他語言524288K
Special Judge, 64bit IO Format: %lld
題目描述
給出一個正整數序列 [a_1\dots a_n][a
1
?
…a
n
?
] 以及定值 kk,每次可以選擇一個區間 [l,r]\ (r-l+1\ge k)[l,r] (r?l+1≥k),把這個區間內的 a_ia
i
?
除以二下取整。是否可能通過一些操作,把所有 a_ia
i
?
變成 11?
若能,求出一種操作次數最少的操作方案。若有多種方案,可以輸出任意一種。
輸入描述:
本題有多組數據。
第一行是數據組數 TT。(1\le T\le 2000)(1≤T≤2000)
每組數據中:
第一行兩個正整數 n,kn,k。(1\le k\le n\le 10^4)(1≤k≤n≤10
4
)
接下來一行 nn 個正整數 a_1\sim a_na
1
?
~a
n
?
。(1\le a_i\le 10^{15})(1≤a
i
?
≤10
15
)
同一個測試點內,所有數據中 nn 的和不超過 2\times 10^42×10
4
。
輸出描述:
對于每組數據:
若無解,輸出 -1。
若有解,第一行輸出最小操作次數 mm。
接下來 mm 行每行兩個正整數 l,rl,r,代表對 [l,r][l,r] 進行一次操作。(1\le l\le r\le n)(1≤l≤r≤n)
示例1
輸入
復制
2
5 3
3 3 5 3 3
5 3
3 3 3 5 3
輸出
復制
2
1 3
3 5
-1
思路 :
- 首先將原數組轉化一下,問題就轉化為將新的數組中每個元素值都變為0
- 為了使操作次數最少,對于每一個左端點,枚舉貪心最優的右端點,選一個盡可能大的 非遞減 的區間,然后將它們值都減一,作為一次操作
總結
以上是生活随笔為你收集整理的Division 贪心,模拟 牛客练习赛95的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Non-interger Area 分类
- 下一篇: 深渊水妖 模拟,贪心 牛客白月赛44