【问题描述】
“有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾……”,话说HYSBZ(Hengyang School for Boys & Zy)学识渊博孩纸们一讲到粮食,都会想起印度那个著名的故事:国王要在第一个格子里放入一粒小麦,接下来的格子放入前面一个格子的两倍的小麦。这样所需小麦总数是巨大的,哪是不用金坷垃就能完成的任务?不过为了减轻国王的任务,那个下棋获胜的宰相换了一个要求:“我只需要你在棋盘外放一粒小麦,可以将其理解为第0个格子,然后你需要在第一个格子里放入若干小麦,之后每一个格子放入前两个格子的小麦数之和的小麦,并且要满足第a个格子放x粒小麦,第b个格子放……”说到这,宰相突然发现自己说的满足第a个格子放x粒小麦的情况可能不存在……欺君可是大罪啊!国王看到宰相迟迟不说,自己也烦了!我自己来算!于是国王拜托你,让你算出第b个格子应该放几粒小麦。当然,就算答案不存在,你也是要告诉国王的。
【输入格式】kela.in
该题有多组数据,请读到文件末结束。
对于每一组数据仅一行,3个正整数a,x,b,分别表示第a个格子放了x粒小麦,以及你所需要计算的是第b个格子的小麦数量。
【输出格式】kela.out
对于每一次询问,仅1个整数,为第b个格子的小麦数量,若宰相说的情况不存在,那么请输出-1。

【样例输入】
1 1 2
3 5 4
3 4 6
12 17801 19
【样例输出】
2
8
-1
516847
【样例解释】
对于样例二,f[1]=2时,能够满足f[3]=5,因此宰相没有撒谎,此时第5个格子的小麦数应为f[4]=f[2]+f[3]=3+5=8.
【数据范围与约定】
对于50%的数据:如果答案存在,那么p<=50
对于100%的数据:1<=数据组数<=10000,1<=a,b<=20, 数据保证如果答案存在,那么1<=p<=1000000.(gwy注:p是第一格放置的小麦数)。

题解

题意:
给你一个数列,满足f(n)=f(n-1)+f(n-2);
知道第0项f(0)=1
给你第a项f(a),判断第a项可不可能为f(a);
如果可能就输出这个数列的第b项f(b);不可能就输出-1;
做法:
这数列只要第1项确定了。那么剩下的数就能确定了;
我们二分枚举第1项(题目有说在1-100W之间)
然后就需要通过第0项和第1项快速确定第a项是什么;
这可以用矩阵乘法实现
构造一个矩阵
利用矩阵乘法:
[0 1] * [f(n-2)] = [f(n-1)]
[1 1] [f(n-1)] [f(n) ]
从n-1转移到n需要乘1次;
那么从1转移到n就需要乘n-1次即
[0 1] ^(n-1) * [f(0)] = [f(n-1)]
[1 1] [f(1)] [f(n) ]
预处理出最左边那个矩阵的1..20次方;
通过二分的f(1)和已知的f(0)即可快速得到f(1..20),做出相应的判断即可;
如果最后二分结束了,还是不能得到一个f(1)使得f(a)=x,则输出-1;
否则再利用上面那个式子算出f(b)即可;
f(n)=构造矩阵的n-1次方[2][1]*f[0]+构造矩阵的n-1次方[2][2]*f[1];
这道题数据是我自己造的。

#include <cstdio>
#define LL long longstruct abc
{LL jz[3][3];
};abc a,pre[25];abc jc(abc a, abc b)
{abc c;for (int i = 1; i <= 2; i++)for (int j = 1; j <= 2; j++){c.jz[i][j] = 0;for (int k = 1; k <= 2; k++)c.jz[i][j] += a.jz[i][k] * b.jz[k][j];}return c;
}abc ksm(int x)
{if (x == 1)return a;abc temp;temp = ksm(x>>1);temp = jc(temp, temp);if (x & 1)temp = jc(temp, a);return temp;
}int main()
{//freopen("F:\\rush.txt", "r", stdin);a.jz[1][1] = 0; a.jz[1][2] = 1; a.jz[2][1] = 1; a.jz[2][2] = 1;for (int i = 1; i <= 20; i++)//可以不用快速幂pre[i] = ksm(i);int number, key, what;while (~scanf("%d%d%d", &number, &key, &what)){int l = 0, r = 1000000;LL f1=-1;if (number == 1)//如果给的是第一项的那么第一项就是keyf1 = key;elsewhile (l <= r)//二分枚举第1项{int m = (l + r) >> 1;LL j = pre[number - 1].jz[2][1] + pre[number - 1].jz[2][2] * m;if (j == key){f1 = m;break;}elseif (j > key)r = m - 1;elsel = m + 1;}if (f1 != -1)//如果找到了满足f(a)==x的f1,则输出f(b){LL ans = what==1?f1:pre[what - 1].jz[2][1] + pre[what - 1].jz[2][2] * f1;printf("%I64d\n", ans);}elseputs("-1");}return 0;
}

【???】【???】小麦亩产一百八相关推荐

  1. 小麦亩产一千八(jzoj 3461)

    小麦亩产一千八 jzoj 3461 题目大意 给你一个正整数序列:a0,a1,a2a_0,a_1,a_2a0​,a1​,a2​-- a0a_0a0​为1 a1a_1a1​为p ax=ax−1+ax−2 ...

  2. JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)

    3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms  Memory Limits: 262144 KB  Det ...

  3. jzoj3461. 小麦亩产一千八 斐波拉契数列

    Time Limits: 1000 ms Memory Limits: 262144 KB Detailed Limits Description "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产 ...

  4. [jzoj 3461]【NOIP2013模拟联考5】小麦亩产一千八 {Fibonacci数列}

    题目 Description "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾--",话说HYSBZ(Hengyang School for Boys & ...

  5. JZOJ3461【小麦亩产一千八(kela)】

    小麦亩产一千八(kela) 题目描述: "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾--",话说HYSBZ(Hengyang School for Boys ...

  6. 【NOIP2013模拟联考5】小麦亩产一千八(kela) (Standard IO)

    Description "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾--",话说HYSBZ(Hengyang School for Boys & Z ...

  7. [Jzoj] 3461. 小麦亩产一千八

    题目描述 "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾--",话说HYSBZ学识渊博孩纸们一讲到粮食,都会想起印度那个著名的故事:国王要在第一个格子里放入一 ...

  8. 10.30纪中DAY2_小麦亩产一千八(kela) 休息(rest) 军训(training)

    noip2019-counting down three weeks 纪中day2 10.30纪中B组notes 小麦亩产一千八(kela)-_- 休息(rest) 军训(training) 题目来源 ...

  9. JZOJ6月20日提高组T1 小麦亩产一千八

    JZOJ6月20日提高组T1 小麦亩产一千八 题目 Description Input Output Sample Input Data Constraint 分析 Code 题目 Descripti ...

最新文章

  1. 但是我们还是不想留遗憾,我们不后悔!
  2. 【Android基础】动画
  3. 为什么Android变得对商业世界至关重要?
  4. python音乐的数据抓取与分析_Python练习之抓取QQ音乐数据
  5. asp.net跨页面传值收集
  6. SAP Spartacus checkout.reducer.ts调用时间点
  7. nodejs 本地php服务器,node.js创建本地服务器详解
  8. 使用RAID进行磁盘管理
  9. php 按key大小排序,PHP实现二维数组根据key进行排序的方法
  10. LeetCode 107. Binary Tree Level Order Traversal II
  11. mysql从库追主库日志_centos 6.5设置mysql主从同步过程记录
  12. 计算机算法常用英语,计算机术语 算法相关术语
  13. 了解计算机技术的课件,了解计算机课件.ppt
  14. wordpress之模板汉化(poedit的使用技巧 及 .po .mo 批量生成技术)
  15. CAD贱人工具箱插件免费下载
  16. 伽罗华有限域_伽罗华域(Galois Field,GF,有限域)乘法运算 | 学步园
  17. AXI协议中的BURST
  18. mongoose用模型更新不了,因为模型对象中默认带有_id会提示errmsg: “Performing an update on the path ‘_id‘ would modify the i
  19. 响铃:360浏览器首创自有根证书,不赚钱为哪般?
  20. 大数据可视化(六)文本数据可视化

热门文章

  1. 游戏私服的配置与防御选择
  2. 百度索引量与“site”结果是不是一样的,site总是接近百度索引量
  3. 关键词排名查询工具 - Search Engine Result Position Checker
  4. java 动物声音模拟器_动物声音模拟器软件
  5. yuan先生博客园地址
  6. 结对作业之需求分析与原型设计
  7. linux系统深入学习
  8. box-shadow无效果
  9. 古典之颠 科技之耀:看裂帛CIO大麦打造互联网品牌的生态牧场
  10. 【毕业设计】基于单片机无线充电的4轴飞行器 -物联网 嵌入式 stm32