题意
给你一个数,要求你将这个数拆成
个每一位为
或
的数,如
等。求
的最小值,以及任意一种方案
分析
首先对于第一问,对于每个数位分析,你每次最多每个数位只能加,所以我们只需要找到数位里最大的那个数,那就是
的最小值。对于任意一种方案,我们只需要每次求数位时,就需要当前位置数字个
,用数组记录一下就好。
代码
#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

京公网安备 11010502036488号