linkkkkk 题意:
给出,要求将
拆成
个数,使得这些数的和是
并且按照
进制计算得到的和最大。
思路:
如果将拆成了
,那么和就从
变成了
,损失了
.
所以尽量将同一位上的整数放在一起,比如
如果不得不拆的话,就尽量在较低的高位中拆分,将拆成
比将
拆成
损失小。前者是
,后者是
代码:
int main() {
int _=read;
while(_--){
int s=read,n=read;
vector<int>res;//记录答案
int x=1e9;
while(x>=1){//从高位往低位划分,尽量按照整数位划分,如果必须要拆分的话,拆分损失小的低位
if(n==1){//只剩一个数,直接输出就好
res.push_back(s);break;
}
if(s-x<n-1){//保证剩下的能够凑齐
x/=10;
continue;
}
res.push_back(x);
s-=x;n--;
}
for(auto t:res) cout<<t<<" ";
puts("");
}
return 0;
}