CodeForces - 1373E Sum of Digits(贪心)
題目鏈接:點(diǎn)擊查看
題目大意:設(shè) f( x ) 為 x 的數(shù)位之和,給出一個(gè) n 和一個(gè) k ,求??的最小 x ,若不存在,輸出 -1
題目分析:因?yàn)?n 和 k 比較小,所以可以打表,當(dāng) k 為 0 的時(shí)候,顯然是 r + 99...999 是最優(yōu)的,其中 r = n%9,當(dāng) k 為 1 的時(shí)候,打表的時(shí)間復(fù)雜度是 sqrt( 1e16 ) * 8 ,也就是將近 1e9 ,本地可能繃不住,所以可以打到 1e7 左右,然后自己找找規(guī)律補(bǔ)齊剩下的幾項(xiàng)就好了,剩下的時(shí)間復(fù)雜度分別就是?,之類的了,本地輕輕松松搞定
然后說(shuō)一下正解,因?yàn)?k 最大只有 9 ,比較顯然的一點(diǎn)就是,至多會(huì)進(jìn)位一次,因?yàn)槲覀冐澬牡牟呗允禽^低位都放置 9 ,所以個(gè)位的進(jìn)位會(huì)涉及到更高位的連續(xù)進(jìn)位,這樣我們不妨設(shè)我們最后構(gòu)造出來(lái)的數(shù)為 r + 99...999 + 8 + 99..999 + x ,我們將需要構(gòu)造的數(shù)分為了五段,因?yàn)檎f(shuō)過(guò)了,為了貪心,所以低位需要盡量放 9 ,我們?cè)O(shè) x 左邊的第一堆 9 的個(gè)數(shù)為 num_9,又因?yàn)槿绻婕斑M(jìn)位的話,會(huì)導(dǎo)致連續(xù)進(jìn)位,所以我們?cè)?num_9 個(gè) 9 之前,放置了一個(gè) 8 ,到此停止連續(xù)進(jìn)位,剩下的再按照當(dāng) k = 0 時(shí)貪心放置就好了
因?yàn)樽疃嘀挥?1e16,換句話說(shuō) num_9 最多只有 16 ,而個(gè)位的 x 也最多只有 9 種取值,我們可以暴力枚舉 x 和 num_9 ,然后計(jì)算此時(shí)貪心放置得到的最小值,就好了
代碼:
?
?
總結(jié)
以上是生活随笔為你收集整理的CodeForces - 1373E Sum of Digits(贪心)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CodeForces - 1373D M
- 下一篇: CodeForces - 1373F N