BJFU 1057

描述

斐波那契额数列,我们都知道。现在qingyezhu想求斐波那契的某项值对2的某次方的结果。你可以帮一下他吗?他好可怜哦!计算了N的N次方次都错了,也挨了ben大哥的N的N次方次的训了。我想你是个好孩子,该会帮他一下吧。不会浪费你多久的时间的。如下是斐波那契数列的定义:

F[0]=1,F[1]=1,F[i]=F[i-1]+F[i-2],其中i>=2.

输入

输入有多组。每一组两个非负数M(0<=M<32)和N(0<=N<92),之间用空格隔开,且每一组数据占一行。

输出

对每组输入数据,请输出F[N]对2^M的求余的结果,每组结果占一行!

样例输入

2 22 35 28

样例输出

2321

也是被网上不良小工具给坑了,斐波那契的表最后十几个值全都不对,一直WA了二十几次,后来自己写了个斐波那契的函数打出来的数才AC了↓

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     long long n,m;
 6     while(cin>>m>>n)
 7     {
 8         long long fib[] = {1,1,2,3,5,8,13,21,34,55,89,144,233,
 9                            377,610,987,1597,2584,4181,6765,10946 ,17711, 28657,
10                            46368, 75025, 121393, 196418, 317811 ,514229 ,832040 ,1346269 ,
11                            2178309LL ,3524578LL ,5702887LL ,9227465LL ,14930352LL ,24157817LL ,
12                            39088169LL ,63245986LL ,102334155LL ,165580141LL ,267914296LL ,433494437LL,
13                            701408733LL ,1134903170LL ,1836311903LL ,2971215073LL ,4807526976LL,
14                            7778742049LL ,12586269025LL ,20365011074LL ,32951280099LL ,53316291173LL,
15                            86267571272LL ,139583862445LL ,225851433717LL ,365435296162LL ,
16                            591286729879LL ,956722026041LL ,1548008755920LL ,2504730781961LL,
17                            4052739537881LL ,6557470319842LL ,10610209857723LL ,17167680177565LL,
18                            27777890035288LL ,44945570212853LL ,72723460248141LL ,117669030460994LL,
19                            190392490709135LL ,308061521170129LL ,498454011879264LL,
20                            806515533049393LL ,1304969544928657LL ,2111485077978050LL,
21                            3416454622906707LL ,5527939700884757LL ,8944394323791464LL ,
22                            14472334024676221LL ,23416728348467685LL ,37889062373143906LL ,
23                            61305790721611591LL ,99194853094755497LL ,160500643816367088LL ,
24                            259695496911122585LL ,420196140727489673LL ,679891637638612258LL ,
25                            1100087778366101931LL ,1779979416004714189LL ,2880067194370816120LL ,
26                            4660046610375530309LL,7540113804746346429LL
27                           };
28         long long twow[]=
29         {
30             1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768LL,65536LL,
31             131072LL,262144LL,524288LL,1048576LL,2097152LL,4194304LL,8388608LL,16777216LL,33554432LL,
32             67108864LL,134217728LL,268435456LL,536870912LL,1073741824LL,2147483648LL
33         };
34         cout<<(fib[n]&(twow[m]-1))<<endl;
35     }
36     return 0;
37 }
时间: 2024-10-29 19:07:52

BJFU 1057的相关文章

1057: 有假币

  1057: 有假币 时间限制(普通/Java):1000MS/10000MS   运行内存限制:65536KByte 总提交: 2844       测试通过:773 描述 居然有假币!!!  事情是这样的,现在猪肉涨了,但是农民的工资却不见涨啊,没钱怎么买猪肉啊.渊子这就去买猪肉,结果找来的零钱中有假币!!!可惜渊子一不小心把它混进了一堆真币里面去了.现在知道假币的重量比真币的质量要轻.给你一个天平,请用最快的时间把那个可恶的假币找出来. 输入 1≤n≤230,输入0结束程序. 输出 最少

BZOJ 1057: [ZJOI2007]棋盘制作

Decsription 给你一个矩阵,求最大了 01相间 的矩阵. Sol DP+悬线法. 这是一个论文啊 <浅谈用极大化思想解决最大子矩形问题>--王知昆. 枚举每一根悬线,记录最左/右/上能到达的点,统计答案. Code /************************************************************** Problem: 1057 User: BeiYu Language: C++ Result: Accepted Time:1384 ms Me

lightoj 1057 - Collecting Gold(状压dp)

题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1057 题解:看似有点下记忆话搜索但是由于他是能走8个方向的也就是说两点的距离其实就是最大的x轴或y轴的差.然后只有15个藏金点状压一下加dfs就行了. #include <iostream> #include <cstring> #include <cstdio> #include <cmath> #define inf 0X3f3f3f

Vijos 1057 盖房子

二次联通门 : Vijos 1057 盖房子 /* Vijos 1057 盖房子 简单的dp 当前点(i, j)所能构成的最大的正方形的边长 为点(i - 1, j - 1)与(i, j - 1), (i - 1, j)三点中最小的边长构成.. 一遍递推, 一边取最大即可 */ #include <cstdio> #define Max 1009 inline int min (int a, int b) { return a < b ? a : b; } inline int max

Timus OJ 1057 数位dp

http://acm.timus.ru/problem.aspx?space=1&num=1057 1057. Amount of Degrees Time limit: 1.0 second Memory limit: 64 MB Create a code to determine the amount of integers, lying in the set [X;Y] and being a sum of exactlyK different integer degrees of B.

BZOJ 1057 棋盘制作

Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳.而我们的主人公小Q,正是国际象棋的狂热爱好者.作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友小W决定将棋盘扩大以适应他们的新规则.小Q找到了一张由N*M个正方形的格子组成的矩形纸片,每个格子被涂有黑白两种颜色之一.小Q想在这种纸中裁减一部分作为新棋盘,当然,他希望这个棋盘尽可

POJ 1057 File Mapping 最详细的解题报告

题目来源:POJ 1057 File Mapping 题目大意:像我的电脑那样显示文件夹和文件信息,其中在同一级目录内,文件夹排在文件的前面并且文件夹的顺序不变,同一级目录中文件按字母序排列.文件以‘f’开头,文件夹以‘d’开头,‘*’表示一个case的结束,‘#’表示所有输入内容结束. 解题思路:递归创建,最后递归输出.算法比较简单,我就不细说了,具体看代码: 具体算法(java版,可以直接运行) 1 import java.util.*; 2 3 public class Main { 4

URAL - 1057 Amount of Degrees

Description Create a code to determine the amount of integers, lying in the set [ X; Y] and being a sum of exactly K different integer degrees of B. Example. Let X=15, Y=20, K=2, B=2. By this example 3 numbers are the sum of exactly two integer degre

1057. 数零壹(20)

1057. 数零壹(20) 给定一串长度不超过105的字符串,本题要求你将其中所有英文字母的序号(字母a-z对应序号1-26,不分大小写)相加,得到整数N,然后再分析一下N的二进制表示中有多少0.多少1.例如给定字符串"PAT (Basic)",其字母序号之和为:16+1+20+2+1+19+9+3=71,而71的二进制是1000111,即有3个0.4个1. 输入格式: 输入在一行中给出长度不超过105.以回车结束的字符串. 输出格式: 在一行中先后输出0的个数和1的个数,其间以空格分