cf#Wunder Fund Round 2016 -A - Slime Combining-简单数学

本文介绍了一种基于给定数量的小笑脸合成大笑脸的算法实现。通过不断将两个小笑脸合成一个大一号的笑脸来达到最终目标。算法使用了位运算来高效判断能够合成笑脸的大小,并输出所有可能合成的最大笑脸尺寸。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

。。。给你n个size=1的笑脸。每相邻2个笑脸可以合成一个大size的笑脸

if (n>= (1<<i))   //表示能分出2^i个size=1的脸,即得到2^(i-1)个size为2的笑脸,以此类推 则答案会有一个size=i+1的笑脸。。很好推

http://codeforces.com/contest/618/problem/A

#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include<stack>
using namespace std;  
const double pi=acos(-1.0);
const double eps=1e-6; 
const int inf=2147483647;

int main()
{
	int i,j;
	int ans[1005];
	int n;
	int ok=0;
	cin>>n;
	for (i=18;i>=0;i--)
	{
		if (n>=(1<<i))
		{
			n-=(1<<i);
			ans[++ok]=i+1;
		}
	}
	for (i=1;i<=ok;i++)
	{
		if (i!=1) printf(" ");
		printf("%d",ans[i]);
	}
	printf("\n");

	
	
	
	
	
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值