D. Expression Evaluation Error 题解(思维+模拟)

题目链接

题目大意

\(t(t\le100)\)组数据

\(s(s\le \min(n,100))\)个数的和为\(n(n\le1e9)\)

要让\(s\)个数从\(10\)进制变为\(11\)进制的和的最大

输出\(s\)个数

题目思路

其实就是贪心的思维

要进位尽可能的少

例如10个1 和1个10的值在11进制下是不同的

实现的话我看了一下rk2的实现是真的很简单 而且复杂度只有\(O(ts)\)

代码

#include<bits/stdc++.h>
#define fi first
#define se second
#define debug cout<<"I AM HERE"<<endl;
using namespace std;
typedef long long ll;
const int maxn=14+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-6;
int s,n;
signed main(){
    int _;cin>>_;
    while(_--){
        cin>>s>>n;
        vector<int> ans;
        for(int x=1e9;x>=1;x/=10){
            if(n==1){
                ans.push_back(s);
                break;
            }
            if(s-x<n-1) continue;
            ans.push_back(x);
            s-=x;
            n--;
            x=x*10;
        }
        for(auto i:ans){
            cout<<i<<" ";
        }
        cout<<'\n';
    }
    return 0;
}
 
posted @ 2021-09-06 10:00  hunxuewangzi  阅读(79)  评论(0编辑  收藏  举报