Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits

Description

“有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾……”,话说HYSBZ(Hengyang School for Boys & Zy)学识渊博孩纸们一讲到粮食,都会想起印度那个著名的故事:国王要在第一个格子里放入一粒小麦,接下来的格子放入前面一个格子的两倍的小麦。这样所需小麦总数是巨大的,哪是不用金坷垃就能完成的任务?不过为了减轻国王的任务,那个下棋获胜的宰相换了一个要求:“我只需要你在棋盘外放一粒小麦,可以将其理解为第0 个格子,然后你需要在第一个格子里放入p粒小麦,之后每一个格子放入前两个格子的小麦数之和的小麦,并且要满足第a 个格子放x 粒小麦,第b 个格子放……”说到这,宰相突然发现自己说的满足第a 个格子放x 粒小麦的情况可能不存在……欺君可是大罪啊!国王看到宰相迟迟不说,自己也烦了!我自己来算!于是国王拜托你,让你算出第b 个格子应该放几粒小麦。当然,就算答案不存在,你也是要告诉国王的。

Input

该题有多组数据,请读到文件末结束。

对于每一组数据仅一行,3 个正整数a,x,b,分别表示第a 个格子放了x 粒小麦,以及你所需要计算的是第b 个格子的小麦数量。

Output

对于每一次询问,仅1 个整数,为第b 个格子的小麦数量,若宰相说的情况不存在,那么请输出-1。

Sample Input

1 1 2

3 5 4

3 4 6

12 17 8

0 1 19

Sample Output

2

8

-1

516847

【样例解释】

对于样例二,f[1]=2 时,能够满足f[3]=5,因此宰相没有撒谎,此时第5 个格子的小麦数应为f[4]=f[2]+f[3]=3+5=8.

Data Constraint
对于50%的数据:如果答案存在,那么p<=50

对于100%的数据:1<=数据组数<=10000,1<=a,b<=20, 数据保证如果答案存在,那么1<=p<=1000000.

解法:斐波拉契数列

我们把数列中每一个值都转化为F[0]和F[1]的和,然后很容易发现规律

F[0]=1;
F[1]=F[1];
F[2]=1F[1]+1F[0];
F[3]=F[2]+F[1]=2F[1]+1F[0];
F[4]=F[3]+F[2]=3F[1]+2F[0];
F[5]=F[4]+F[3]=5F[1]+3F[0];
然后,我们就很容易发现,F[1]的系数就是第n个斐波拉契数列,而F[0]的系数就是第n-1个斐波拉契数列

因为1<=a,b<=20,所以我们可以先打一个1到20的斐波拉契数列表

F[a]=第a个斐波拉契数 * F[1]+第a-1个斐波拉契数 * F[0]

上式,题目中已经给出了F[a]和F[0]的值,然后我们就能直接算出F[1],如果F[1]的值小于0或者不能整除第a个斐波拉契数,就输出-1,因为不能放不足一个放在第一个格子里,然后就能算出F[b]的值了

AC代码

#include<cstdio>
#define ll long long
using namespace std;
ll f[25]={0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765};
ll a,x,b;
int main() {while(scanf("%lld%lld%lld",&a,&x,&b)!=EOF) {ll nf1=x-f[a-1];if(nf1<0||nf1%f[a]) {printf("-1\n");continue;}ll f1=nf1/f[a];ll fb=f[b]*f1+f[b-1];printf("%lld\n",fb);}return 0;
}

jzoj3461. 小麦亩产一千八 斐波拉契数列相关推荐

  1. 经典算法(6)斐波拉契数列、兔子繁殖、跳台阶算法

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

  2. [python]练习之递归和循环实现斐波拉契数列

    1 # 程序功能:用递归和循环实现斐波拉契数列 2 # 0 1 1 2 3 5 8 13 21 34 3 4 def digui_fibo(number): 5 if number == 1: 6 r ...

  3. 函数-生成器之斐波拉契数列

    斐波拉契数列:除第一个和第二个数外,任意一个数都可以由前两个数相加而来. 无法用生成式,但可由函数生成. 函数生成斐波拉契数列数列: def fib(max):n,a,b=0,0,1while n & ...

  4. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

  5. 趣学算法之斐波拉契数列实现

    1.斐波拉契数列 f(1) = 1; f(2) = 1; f(3) = f(1) + f(2);以此内推1 x = 1 f(x) = 1 x = 2f(x - 1) + f(x - 2) x > ...

  6. c语言n次方怎么输入_C语言实现斐波拉契数列

    C语言实现斐波拉契数列教程 怎么使用 C 语言实现计算斐波拉契数列的第 N 项的值? C语言实现斐波拉契数列详解 背景知识 斐波那契数列是一组第一位和第二位为 1,从第三位开始,后一位是前两位和的一组 ...

  7. 递归、尾递归、迭代算法【在 斐波拉契数列】上的实现

    /*     递归: [逆序]从未知点推到已知点,[顺序]代入已知点结果,从已知点带入并计算到未知点,最终到终点     尾递归: 从起点开始,依顺序计算结果,并无限靠近最终目标点     迭代: 从 ...

  8. 蓝桥杯练习题:对给定整数基于斐波拉契数列构造字符串

    文章目录 一.提出问题 二.解决问题 (一)分析 (二)编程 1.构造[1, n]范围内的斐波拉契数列表 2.基于斐波拉契数列构造字符串函数 3.编写主控程序 4.运行程序,查看结果 三.优化算法 一 ...

  9. Python案例:格式化输出斐波拉契数列

    文章目录 一.提出任务 二.运行效果 三.实现步骤 1.定义fib(n)函数 2.采用format()函数实现格式化输出 3.采用repr()与rjust()函数实现格式化输出 4.运行程序,查看效果 ...

最新文章

  1. 「硅仙人」吉姆 · 凯勒:我在特斯拉是最闲的员工,却要在英特尔管一万人
  2. Kubernetes — 在 OpenStack 上使用 kubeadm 部署高可用集群
  3. python怎么判断一个文件是否存在-python判断文件是否存在的方法
  4. 牛客练习赛71 F 红蓝图(kruskal重构树)
  5. 中文字符频率统计python_python统计字符串出现最多的字母及其出现次数
  6. 编程让鼠标一直动_华硕、罗技、海盗船无线鼠标选哪个?
  7. mysql连接数据了的dep_Mysql-多表连接的操作和用法
  8. 20220323:双边沿触发器趣解
  9. latex sign_LATEX科研论文写作教程
  10. Selenium 新手入门(C#)1. 用vs运行调用Selenium打开页面
  11. 空行的符号 计算机,word中空白行的回车符号怎么消除 消除word中的回车符号
  12. Nacos 原理 Jraft Distro Grpc 持续跟新中...
  13. Docker数据管理:data container
  14. 【全套完结】电磁场与电磁波实验-----全套Matlab仿真实验
  15. LeetCode. 15 - 三数之和
  16. html5 侧滑菜单,侧滑菜单
  17. 排座系统c语言,2008noip排座位C语言详解.doc
  18. 科技发展快速,VR、AR概念要怎么区分?
  19. Primefaces使用小结
  20. 教师使用计算机的注意事项,李磊老师:计算机专业考研报考注意事项

热门文章

  1. anaconda更新python版本mac_055-Anaconda升级及mac设置python版本
  2. vr直播怎么做?vr直播平台有哪些?
  3. 服务器ibms管理系统,IBMS智能化管理系统
  4. python中ceil函数是什么意思_python中ceil()函数用法
  5. 档案数字化中的OCR应用
  6. 第五模块:WEB开发基础-第8章 Jquery开发BootStrap
  7. ITE 在vs下可以模拟,在ite下无法编译
  8. 力扣(LeetCode)数据库最新44题190526Oracle版(2)
  9. RK3399调试camera记录
  10. 【内含福利】全球第一例:苹果Apple Card遭盗刷,物理卡或被克隆;谷歌正在试产5G智能手机,最快下周发布……...