H. Mood Balance

  • 坐标变换:令\(y_i=x_i+2i\)
  • 2147483648=\(2^{31}\) 缺少的一位是符号位
点击查看代码
#include <bits/stdc++.h>
using namespace std;
vector<int>ans;
int main()
{
	long long n;
	cin>>n;
	int cnt=0;
	ans.push_back(-2);
	for(int i=0;i<63;i++)
	{
		if((((2*n)>>i)&1)==1)
		{
			ans.push_back((*(--ans.end()))+cnt+2);
			cnt=0;
		}
		else
		{
			cnt++;
		}
	}
	cout<<ans.size()-1<<endl;
	reverse(++ans.begin(),ans.end());
	for(int i=1;i<ans.size();i++)
	{
		cout<<n-ans[i]<<' ';
	}
	cout<<endl;
	return 0;
}
posted @ 2024-07-23 17:06  D06  阅读(1)  评论(0编辑  收藏  举报