专栏文章

题解:CF1567D Expression Evaluation Error

CF1567D题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipcmvbn
此快照首次捕获于
2025/12/03 09:49
3 个月前
此快照最后确认于
2025/12/03 09:49
3 个月前
查看原文

题目传送门:CF1567D Expression Evaluation Error

Solution:

新知引入:

十一进制:有 0,1,2,3,4,5,6,7,8,9,A0,1,2,3,4,5,6,7,8,9,A 11个数(符号)。
十进制下 1+9=101+9=10,而十一进制下 1+9=A1+9=A
十进制下 10=1010=10,而十一进制下 10>A10>A
对于以上文段,我们可以观察到如果我们将 ss 拆分成尽量少的进位,就可以使答案最优。

题目解析:

我们可以贪心的从高位贪起,每次找到比他小、离他最近的 1010 的幂,保证进位数尽量少。
注意:题目中说要求要正整数,所以查找该数 1010 的幂时,一定要为其他数留出位置!

Code:

CPP
#include<bits/stdc++.h>
using namespace std;

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--){
		int s,n,p;
		cin>>s>>n;
		while(n--){
			if(!n){
				cout<<s<<'\n';
				break;
			}
			else p=pow(10,(int)log10(s-n)),cout<<p<<' ';
			s-=p;
		}
	}
	return 0;
}

完结撒花。

评论

0 条评论,欢迎与作者交流。

正在加载评论...