专栏文章

题解:P7071 [CSP-J2020] 优秀的拆分

P7071题解参与者 9已保存评论 12

文章操作

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

当前评论
12 条
当前快照
1 份
快照标识符
@miqnwy3q
此快照首次捕获于
2025/12/04 07:53
3 个月前
此快照最后确认于
2025/12/04 07:53
3 个月前
查看原文

思路

看到 22 的正整数次幂和,想到二进制。
显然,奇数的二进制最后一位是 11,所以其没有“优秀的拆分”,也可以这样理解:若干偶数之和,怎么可能等于奇数呢。
同理,偶数一定有“优秀的拆分”。
结果就是求出这个数中所有二进制上为 11 的部分,并把它们转化成十进制。

代码

CPP
#include<bits/stdc++.h>
using namespace std;
int main(){
	long long n,i=1;
	cin>>n;
	if(n%2){
		cout<<-1;
		return 0;
	}
	while(i<=n) i*=2;
	i/=2;
	while(n){
		n-=i;
		cout<<i<<" ";
		while(i>n) i/=2;
	}
	return 0;
}

评论

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

正在加载评论...