题解:CF1567D Expression Evaluation Error

· · 题解

题目传送门:CF1567D Expression Evaluation Error

Solution:

新知引入:

十一进制:有 0,1,2,3,4,5,6,7,8,9,A 11个数(符号)。

十进制下 1+9=10,而十一进制下 1+9=A

十进制下 10=10,而十一进制下 10>A

对于以上文段,我们可以观察到如果我们将 s 拆分成尽量少的进位,就可以使答案最优。

题目解析:

我们可以贪心的从高位贪起,每次找到比他小、离他最近的 10 的幂,保证进位数尽量少。

注意:题目中说要求要正整数,所以查找该数 10 的幂时,一定要为其他数留出位置!

Code:

#include<bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin>>t;
    while(t--){
        int s,n,p;
        cin>>s>>n;
        while(n--){
            if(!n){
                cout<<s<<'\n';
                break;
            }
            else p=pow(10,(int)log10(s-n)),cout<<p<<' ';
            s-=p;
        }
    }
    return 0;
}

完结撒花。