0
点赞
收藏
分享

微信扫一扫

CF1567D. Expression Evaluation Error(思维 贪心)


​​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;
}


举报

相关推荐

0 条评论