
位运算+贪心,这个解法是真的tql
AC代码:
#include<iostream>
using namespace std;
const int maxn=1e5+10;
int ans[maxn],cnt,sum,n;
int main() {
cin>>sum>>n;
for(int i=1; i<=n; i = i*2) {
for(int j=i; j<=n&∑ j+=i*2) {
if(sum&i || j+2*i<=n) { //***
ans[cnt++] = j;
sum -= i;
}
else break;
}
}
if(!sum){
cout<<cnt<<endl;
for(int i=0;i<cnt;i++) cout<<ans[i]<<" ";
}
else cout<<"-1"<<endl;
}
本文介绍了一种结合位运算和贪心策略的算法解题思路,通过具体代码实例展示了如何利用位运算优化贪心算法,实现高效的问题求解。

被折叠的 条评论
为什么被折叠?



