BestCoder10 1001 Revenge of Fibonacci(hdu 5018) 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5018

题目意思:给出在 new Fibonacci 中最先的两个数 A 和 B(也就是f[1] = A, f[2] = B),通过这条式子f[n] = f[n-1] + f[n-2],问 C 是否在这条 new Fibonacci sequence 内。(1 <= A, B, C <= 1 000 000 000)

首先,要想到 C 有可能是 A 或者 B,这种情况也是属于在这个序列范围内的。

还有一个地方,不要固定死数组的长度,因为不确定到底需要多大的空间存下来,而且,确实比较浪费空间,当前需要求出一个新的数,其实就是需要前面的两个数而已,再前面的根本就没什么用。

于是我这里就用到滚动数组的技巧,只开了长度为 4,不断迭代来判断在 1000 000 000 的范围内,能否得到 C 这个数。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 using namespace std;
 6
 7 const int INF = 1e9;
 8 __int64 A, B, C;
 9 __int64 f[4];
10
11 int main()
12 {
13     int T, i;
14     while (scanf("%d", &T) != EOF)
15     {
16         while (T--)
17         {
18             scanf("%I64d%I64d%I64d", &A, &B, &C);
19             f[0] = 0;
20             f[1] = A;
21             f[2] = B;
22             if (C == A || C == B)
23                 printf("Yes\n");
24             else
25             {
26                 bool flag = 0;
27                 for (i = 3; ; i++)
28                 {
29                     f[0] = f[1];
30                     f[1] = f[2];
31                     f[2] = f[0] + f[1];
32                     if (f[2] == C)
33                     {
34                         flag = 1;
35                         break;
36                     }
37                     if (f[2] >= INF)
38                         break;
39                 }
40                 printf("%s\n", flag ? "Yes" : "No");
41             }
42         }
43     }
44     return 0;
45 }
时间: 2024-10-17 21:36:16

BestCoder10 1001 Revenge of Fibonacci(hdu 5018) 解题报告的相关文章

BestCoder10 1001 Revenge of GCD(hdu 5019) 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5019 题目意思:给出 X 和 Y,求出 第 K 个 X 和 Y 的最大公约数. 例如8 16,它们的公约数依次为1 2 4 8,那么第 3 个 GCD(X, Y) = 2,也就是从后往前数第3个公共因子. TLE思路:求出 X 的所有因子(从小到大开始存储),再从后往前枚举这些因子,检查是否也为 Y 的因子,统计到第 K 个数就是答案了......以为可以顺利通过,原来数据量还是非常大滴!!! 正确

BestCoder24 1001.Sum Sum Sum(hdu 5150) 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5150 题目意思:就是直接求素数. 不过 n = 1,也属于答案范围!!只能说,一失足成千古恨啊----- 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 using namespace std; 6 7 const int maxn = 1

BestCoder9 1003 Revenge of kNN(hdu 4995) 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4995 题目意思:在一个一维坐标轴上,给出位置 xi 和值 vi,对于 M 次询问,每次询问给出index Qi,求出离数组下标 Qi(从1开始) 最近的 K 个点,从新计算该下标所指示的value值,即等于 K 个 最近点的value值之和 / K,如果有多个K的最近点,那么选择坐标值靠前的那组. 模拟题.首先对将位置从小到大排序,然后求出每一个点的 K 个最近点,最近是通过xi 离当前 xpos

BestCoder8 1002 Revenge of Nim(hdu 4994) 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4994 题目意思:有 n 个 heap(假设从左至右编号为1-n),每个 heap 上有一些 objects.有两个player,轮流从左至右的 heap 上取走 object(1 <= 取走数 <= 当前heap上的最多objects数),规定当前的 heapi 如果还有object,那么不能取走heapi+1的object,直到把 heapi 的 object 全部取光. 题解在这里 http:

BestCoder13 1001.Beautiful Palindrome Number(hdu 5062) 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5062 题目意思:给出 N,找出 1 - 10^N 中满足 Beautiful Palindrome Numbers (BPN)的数量有多少. 满足 BPN 的条件有两个:(1)回文串   (2)对称的部分从左到右递增排放. (1)版本 1 (比较麻烦,建议看版本2)        46ms 1 #include <iostream> 2 #include <cstdio> 3 #inc

hdu 2112 HDU Today 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目意思:又是求最短路的,不过结合埋字符串来考查. 受之前1004 Let the Balloon Rise 学到用map 的解法做之后,有点蠢蠢欲动,当时见到要用字典树做有点吓坏了(之前看过下,非一般难理解,所以暂时放下了).于是,死就死吧,硬住头皮用map做,反反复复修改终于过了. 首先是memory limit exceeded,因为无读清题目意思,直接开10000 * 10000的数组

BestCoder16 1002.Revenge of LIS II(hdu 5087) 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5087 题目意思:找出第二个最长递增子序列,输出长度.就是说,假如序列为 1 1 2,第二长递增子序列是1 2(下标为2 3),而第一长递增子序列也是(下标为 1 3). 我一开始天真的以为,还是利用求最长递增子序列的算法啦,第二长不就是对dp 数组sort完后(从小到大)的dp[cnt-1] 啦,接着就呵呵啦----= = 题解说,要加多一个 dp 数组,以便对当前下标值为 i 的数 a[i] 为结

BestCoder18 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5108 题目意思:给出一个数正整数 N,N <= 1e9,现在需要找出一个最少的正整数 M,使得 N/M 是素数.如果找不到就输出0. 一开始有想过将所有 <= 1e9 的素数求出来的,不过绝对超时就放弃了:然后就开始从题目中挖掘简便的处理方法.受到求素数的方法启发,枚举的因子 i 如果在 i * i <= N 之内都没有找到符合条件的素数,那么那些 > N 的因子就更不可能了.于是时间

(字典树)Revenge of Fibonacci -- HDU -- 4099

链接: http://acm.hdu.edu.cn/showproblem.php?pid=4099 要用c++交哦, G++ MLE 不是很懂,先粘上慢慢学习 代码: #include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; #define N 100 struct node { int ID; node *next[10