位运算+斐波那契的一道题

标签: c c++
8人阅读 评论(0) 收藏 举报
分类:
链接:https://www.nowcoder.com/acm/contest/91/F
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

小Y在研究数字的时候,发现了一个神奇的等式方程,他屈指算了一下有很多正整数x满足这个等式,比如1和2,现在问题来了,他想知道从小到大第N个满足这个等式的正整数,请你用程序帮他计算一下。

(表示按位异或运算)

输入描述:

第一行是一个正整数,表示查询次数。

接着有T行,每行有一个正整数,表示小Y的查询。

输出描述:

对于每一个查询N,输出第N个满足题中等式的正整数,并换行。
找规律,你会发现它和斐波纳契数列有关,先写小程序打表,神奇的一道题
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
ll dp1[61],dp2[61];
void init()
{
	dp1[1] = 1;
	dp1[2] = 2;
	dp2[1] = 1;
	dp2[2] = 2;
	for(int i = 3;i <= 60;i ++)
	{
		dp1[i] = dp1[i - 1] + dp1[i - 2];
		dp2[i] = dp2[i - 1] * 2;
	}
}
int main()
{    
	init();
	int t;
	ll n;
	cin >> t;
	while(t --)
	{
		cin >> n;
		ll ans = 0;
		while(n > 0)
		{
			for(int i = 60;i >= 0;i --)
			{
				if(n >= dp1[i])
				{
					ans += dp2[i];
					n -= dp1[i];
				}
			}
		}
		cout << ans << endl;
	} 
	return 0; 
}


查看评论

每天一道编程题(1)

现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1)。每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转。问最少需要移动几步。 输入描述: 一行五个整数...
  • yj1499945
  • yj1499945
  • 2015-09-24 10:15:22
  • 674

每天一道算法题(30)——高效的求斐波拉契数列

对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - 1) + F(n - 2),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int...
  • qianhen123
  • qianhen123
  • 2015-08-05 15:52:29
  • 1236

【BZOJ2759】一道动态树的好题

2759: 一个动态树好题Time Limit: 10 Sec Memory Limit: 128 MB Description有N个未知数x[1..n]和N个等式组成的同余方程组: x[i]=...
  • qq_30401759
  • qq_30401759
  • 2016-02-10 12:06:18
  • 1285

2014蓝桥杯本科C/C++组预赛第9题<斐波那契>解题报告

首先是题目链接 http://lx.lanqiao.org/problem.page?gpid=T121 如有错误,欢迎指出,讨论~ 蓝桥杯里面的数据相当水...很容易就能够水过去 现场思路 ...
  • ronnoc
  • ronnoc
  • 2014-03-26 20:38:06
  • 4578

C语言 每天做一道编程题

好久没做编程题了,算法和数据结构该忘的也都忘干净了,今天开始至少每天做道题,然后写写tips吧,各种都可以。 3.13 写了两道简单的PAT:3n+1(卡拉兹猜想)和将数字转换成拼音       ...
  • NOMALJAVAEST
  • NOMALJAVAEST
  • 2016-03-13 22:25:14
  • 336

一道算法题,(位运算)

两个数组,其中一个包含有n个数1 开始时利用第一个数组一次减去第二个数组。 #include "stdio.h" int main(){ int num = 4; int all[] = {...
  • dream_hai
  • dream_hai
  • 2016-09-18 21:17:34
  • 172

一道位运算技巧题

今天Mayuyu遇到一个非常有意思的题目,描述如下   题目:有一堆数,若干个数出现了3次,只有一个数出现了1次,找出只出现1次的那个数。   分析:把这个问题进行推广,得到如下描述   ...
  • ACHelloWorld
  • ACHelloWorld
  • 2015-02-22 18:25:23
  • 653

《github一天一道算法题》:并归排序

看书、思考、写代码! /******************************************* * copyright@hustyangju * blog: http://blog...
  • hustyangju
  • hustyangju
  • 2014-11-04 22:14:34
  • 881

OJ.3157: 这是一道简单题

3157: 这是一道简单题 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 139  Solved: 10 [Submit][Status][We...
  • JYL1159131237
  • JYL1159131237
  • 2017-06-17 10:36:56
  • 168

一道字符串解析题

题目:我从网络收到一段bufferUSER: nonocast/nPWD: 123456/nCMD:/naaaaa/nbbbbb/ncccccc/n然后我想将他转换成一个字典(Hash表,Map都ok...
  • dyw
  • dyw
  • 2007-09-20 00:42:00
  • 1016
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 2546
    排名: 1万+
    文章存档
    最新评论