分析
易证:对于一个位置上的1来说,直接消除,绝对比进位消除优(显然
所以我们只需要每次贪心消去非零位上的一个1即可
代码
//20zr 18 day4 C #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <cmath> #define LL long long #define Cl(X,Y) memset((X),(Y),sizeof(X)) #define FOR(i,A,B) for(int i=A;i<=B;i++) #define BOR(i,A,B) for(int i=A;i>=B;i--) #define Lowbit(X) (X & (-X)) #define Skip cout<<endl; #define INF 0x3f3f3f3f #define Mod 998244353 #define Rson (X<<1|1) #define Lson (X<<1) using namespace std; const int MaxN=1e6+10; int Total,Num[MaxN],Cnt,Ans,Temp[11]; char Res[11][MaxN]; inline void File() { freopen(".in","r",stdin); freopen(".out","w",stdout); } int main() { // File(); // ios::sync_with_stdio(false); scanf("%d",&Total); while(Total) { Num[++Cnt]=Total%10; Total/=10; } FOR(i,0,9) { bool Jud=false,Sta=false; BOR(j,Cnt,1) { if(Num[j]) { Res[i][++Temp[i]]='1'; Num[j]--; Jud |= true; Sta=true; } else { if(Sta) { Res[i][++Temp[i]]='0'; } } } if(Jud) { Ans++; } } cout<<Ans<<endl; FOR(i,0,Ans-1) { FOR(j,1,Temp[i]) { printf("%c",Res[i][j]); } cout<<" "; } // fclose(stdin); // fclose(stdout); system("pause"); return 0; }