题目描述

WYF手中有这样一条递推式

WYF并不是想让你帮他做出结果,事实上,给定一个n,他能够迅速算出Fn。WYF只是想单纯的考验一下读者们。

输入描述

仅一行,三个整数N,F1,P

输出描述

仅一行,表示Fn模P的余数。

样例输入
  1. 5 1 100
样例输出
  1. 41
注释

对20%的数据,N≤1000。

对50%的数据,N≤10000000。

对100%的数据,N、F1≤1018,P≤109

解题思路

N<=1e18,最后的复杂度应该是O(1)或者O(lg(N))

直接模拟式o(N^2)的,显然不行,虽然可以骗到20分。

考虑累加中每一项之前都乘了n^2,可以算一下f(n+1)-f(n)

F(n)=F(n-1)+(n-1)∑(k=1) (n-k)*F(k)(n>=3)

每一个f之前都乘了n,所以考虑再减一下

F(n)=2*F(n-1)-F(n-2)+(n-1)∑(k=1)F(k) (n>=4)

那如果再减一下,是不是就没有∑了,于是我又减了一下

F(n)=4*F(n-1)-3*F(n-2)+F(n-3) (n>=5)

看到这个样子就很舒服了,明显矩阵快速幂,但是我手残,总是忘记longlong越界之类的问题,调了一下午,终于过了。

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. using namespace std;
  5. long long n,p,t;
  6. struct mat
  7. {
  8. long long a[][];
  9. mat()
  10. {
  11. memset(a,,sizeof(a));
  12. }
  13. mat operator * (mat x)
  14. {
  15. mat ans;
  16. for(int i=;i<=;i++)
  17. for(int j=;j<=;j++)
  18. for(int k=;k<=;k++)
  19. ans.a[i][j]+=a[i][k]*x.a[k][j],ans.a[i][j]=(ans.a[i][j]+p)%p;
  20. return ans;
  21. }
  22. }f,chg;
  23. mat mul(mat x,long long k)
  24. {
  25. mat res;
  26. res.a[][]=res.a[][]=res.a[][]=;
  27. for(long long i=k;i;i>>=,x=x*x)
  28. if(i&)
  29. res=res*x;
  30. return res;
  31. }
  32. int main()
  33. {
  34. scanf("%lld%lld%lld",&n,&t,&p);
  35. if(n==||n==)
  36. printf("%lld\n",t%p);
  37. else if(n==)
  38. printf("%lld\n",(*t)%p);
  39. else if(n==)
  40. printf("%lld\n",(*(t%p))%p);
  41. else
  42. {
  43. f.a[][]=(*(t%p))%p,f.a[][]=(*t)%p,f.a[][]=t%p;
  44. chg.a[][]=,chg.a[][]=,chg.a[][]=,chg.a[][]=-,chg.a[][]=,chg.a[][]=,chg.a[][]=,chg.a[][]=,chg.a[][]=;
  45. chg=mul(chg,n-);
  46. f=f*chg;
  47. printf("%lld\n",f.a[][]);
  48. }
  49. return ;
  50. }

Tyche 2191 WYF的递推式的更多相关文章

  1. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

  2. P1067Warcraft III 守望者的烦恼(十大矩阵问题之七求递推式)

    https://vijos.org/p/1067 守望者-warden,长期在暗夜精灵的的首都艾萨琳内担任视察监狱的任务,监狱是成长条行的,守望者warden拥有一个技能名叫“闪烁”,这个技能可以把她 ...

  3. hdu 1757 A Simple Math Problem (构造矩阵解决递推式问题)

    题意:有一个递推式f(x) 当 x < 10    f(x) = x.当 x >= 10  f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + ...

  4. HDU - 2604 Queuing(递推式+矩阵快速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. 【模板】BM + CH(线性递推式的求解,常系数齐次线性递推)

    这里所有的内容都将有关于一个线性递推: $f_{n} = \sum\limits_{i = 1}^{k} a_{i} * f_{n - i}$,其中$f_{0}, f_{1}, ... , f_{k ...

  6. 一只青蛙从第一级台阶跳到第n级,每次可以跳任意级,共有多少种跳法,并写出递推式

    是斐波那契数列问题 假设f(n)是n个台阶跳的次数:(假设已经调到第n个台阶,最后一次是由哪个台阶跳上来的) f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) ...

  7. 51nod1149 Pi的递推式

    基准时间限制:1 秒 空间限制:131072 KB 分值: 640 F(x) = 1 (0 <= x < 4) F(x) = F(x - 1) + F(x - pi) (4 <= x ...

  8. HDU 1757 A Simple Math Problem 【矩阵经典7 构造矩阵递推式】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1757 A Simple Math Problem Time Limit: 3000/1000 MS (J ...

  9. 【poj3420】递推式转矩阵乘法

    历史性的时刻!!! 推了一晚上!和hyc一起萌萌哒地推出来了!! 被摧残蹂躏的智商啊!!! 然而炒鸡高兴!! (请不要介意蒟蒻的内心独白..) 设a[i]为扫到第i行时的方案数. 易知,对于一行1*4 ...

随机推荐

  1. [Spark][Python][Application]非交互式运行Spark Application 的例子

    非交互式运行Spark Application 的例子 $ cat Count.py import sys from pyspark import SparkContext if __name__ = ...

  2. ASP.NET Core MVC之ViewComponents(视图组件)知多少?

    前言 大概一个来星期未更新博客了,久违了各位,关于SQL Server性能优化会和ASP.NET Core MVC穿插来讲,如果你希望我分享哪些内容可以在评论下方提出来,我会筛选并看看技术文档来对你的 ...

  3. 抛弃配置后的Spring终极教程

    一:前言 Spring 有XML配置和注解两种版本,我个人非常喜欢使用注解,相当热衷Spring boot! 对于Spring,核心就是IOC容器,这个容器说白了就是把你放在里面的对象(Bean)进行 ...

  4. java 日志框架总结

    在项目开发过程中,我们可以通过 debug 查找问题.而在线上环境我们查找问题只能通过打印日志的方式查找问题.因此对于一个项目而言,日志记录是一个非常重要的问题.因此,如何选择一个合适的日志记录框架也 ...

  5. 学习用Node.js和Elasticsearch构建搜索引擎(1):了解并运行Elasticsearch

    1.学习Elasticsearch概述. 了解Elasticsearch是什么?能做什么?可以查一下elasticsearch.lucene等的相关介绍,另外也可以查查资料比较一下其它的搜索引擎sph ...

  6. Python学习第九篇——while和for的区别

    pets = ['dog','cat','dog','goldfish','cat','rabbit','cat'] print(pets) for pet in pets: print(pet) # ...

  7. GitHub和Git超超超详细使用教程

    GitHub的简单使用第一步 创建GitHub账号1. 打开GitHub官网.2. 点击绿色按钮Sign up for GitHub,填写用户名,邮件地址和密码.注意: 用户名只能包含字母和" ...

  8. 在网站开发时,可以设置防盗,不被复制和F12

    禁止小功能 //禁止右键 document.oncontextmenu = function () { return false } //禁止f12 document.onkeydown = func ...

  9. beego 自定义控制器与路由

    框架浅析 这是之前使用bee创建的webapp目录层级结构: ├── conf 配置文件 │ └── app.conf ├── controllers 控制器 │ └── default.go ├── ...

  10. shell脚本--初识CGI

    CGI按照百度百科的定义,如下: CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能.CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数 ...