D. Expression Evaluation Error
题链
观察样例 发现我们应该应该减少进位 并且必须要进位的话 我们也是选择小的位来进
这样我们的做法就完成了
肯定是将所有位都拆开
先拆成比如3213 1000 1000 1000 100 100 10 1 1 1
然后为了小位来进我们把10来拆 然后拆100 再拆1000
最后注意:我们可以先全部拆了 大于n了也不要急 直接从后往前先把大的位输出了再输出小的位 其实只要我们选择拆了 那么总和在拆第一个的时候就减小了 所有我们后面合起来进位还是不变的
void solve(){
int s,n;cin>>s>>n;
multiset<int>v;
int S=s;
for(int i=1;s;i*=10,s/=10){
int r=s%10;
while(r--)v.insert(i);
}
while(v.size()<n){
auto it=v.upper_bound(1);
int x=*it;
v.erase(it);
for(int i=1;i<=10;i++)v.insert(x/10);
}
int now=0;
for(auto it=v.rbegin();--n;now+=*it,it++)
cout<<*it<<' ';
cout<<S-now<<endl;
}
标签:10,742,int,Codeforces,100,Round,进位,1000
From: https://www.cnblogs.com/ycllz/p/17058183.html