题意

给你一个数,要求你将这个数拆成个每一位为的数,如等。求的最小值,以及任意一种方案

分析

首先对于第一问,对于每个数位分析,你每次最多每个数位只能加,所以我们只需要找到数位里最大的那个数,那就是的最小值。对于任意一种方案,我们只需要每次求数位时,就需要当前位置数字个,用数组记录一下就好。

代码

#include<bits/stdc++.h>
#define ll long long
const int N=1e5+5,INF=0x3f3f3f3f,mod=998244353;
using namespace std;

int n,res,ans;
int num[N];

inline int read()
{
    register int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
    return x*f;
}

int main()
{
    n=read();
    for(int i=1;i<=n;i*=10)
    {
        res=(n/i)%10;
        ans=max(ans,res);
        for(int j=1;j<=res;++j) num[j]+=i;
    }
    printf("%d\n",ans);
    for(int i=1;i<=ans;i++)
        printf("%d ",num[i]);
    return 0;
}

后记

对了,依旧不让用万能头呢/weixiao