題目大意:設 f( x ) 為 x 的數位之和,給出一個 n 和一個 k ,求??的最小 x ,若不存在,輸出 -1
題目分析:因為 n 和 k 比較小,所以可以打表,當 k 為 0 的時候,顯然是 r + 99...999 是最優的,其中 r = n%9,當 k 為 1 的時候,打表的時間復雜度是 sqrt( 1e16 ) * 8 ,也就是將近 1e9 ,本地可能繃不住,所以可以打到 1e7 左右,然后自己找找規律補齊剩下的幾項就好了,剩下的時間復雜度分別就是?,之類的了,本地輕輕松松搞定
然后說一下正解,因為 k 最大只有 9 ,比較顯然的一點就是,至多會進位一次,因為我們貪心的策略是較低位都放置 9 ,所以個位的進位會涉及到更高位的連續進位,這樣我們不妨設我們最后構造出來的數為 r + 99...999 + 8 + 99..999 + x ,我們將需要構造的數分為了五段,因為說過了,為了貪心,所以低位需要盡量放 9 ,我們設 x 左邊的第一堆 9 的個數為 num_9,又因為如果涉及進位的話,會導致連續進位,所以我們在 num_9 個 9 之前,放置了一個 8 ,到此停止連續進位,剩下的再按照當 k = 0 時貪心放置就好了
因為最多只有 1e16,換句話說 num_9 最多只有 16 ,而個位的 x 也最多只有 9 種取值,我們可以暴力枚舉 x 和 num_9 ,然后計算此時貪心放置得到的最小值,就好了