1085: Water Problem

Time Limit:3000/1000 MS (Java/Others)   Memory Limit:163840/131072 KB (Java/Others)
Total Submissions:1252   Accepted:132

[Submit][Status][Discuss]

Description

函数 f:Z+→Z。已知 f(1),f(2) 的值,且对于任意 x>1x>1,有 f(x+1)=f(x)+f(x−1)+sin(πx/2)。

求 f(n)f(n) 的值。

Input

多组数据。(数据组数 T≤100)

每组数据包含 3 个不超过 10^9 的正整数,分别代表 f(1),f(2)和 n 的值。

Output

输出 f(n)mod(10^9+7)。每组输出末尾有换行符。

Sample Input

1 2 3
1 2 5

Sample Output

3
7 题意很清楚。题目出处:http://dutacm.club:7217/codesheaven/problem.php?id=1085
思路:也是看的题解,之前就是最后的sin解决不了。使用此处sin函数的周期为4,那么每半个周期可以将sin抵消掉。
f(x+1)=f(x)+f(x-1)+sin(πx/2) 1式
f(x-1)=f(x-2)+f(x-3)+sin(π(x-2)/2) 2式
将2式带入1式,得f(x+1)=f(x)+f(x-2)+f(x-3),然后转移矩阵很容易写出。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
#define MOD 1000000007
#define LL long long int Sin[]= {,,,-};
struct Matrix
{
int row,col;
LL matr[][];
Matrix() {}
Matrix(int r,int c,int num=)
{
row=r;
col=c;
for(int i=; i<=r; i++)
for(int j=; j<=c; j++)
matr[i][j]=num;
}
}; Matrix matr_multi(Matrix m1,Matrix m2) //矩阵乘法
{
Matrix m3(m1.row,m2.col,);
for(int i=; i<=m1.row; i++)
for(int j=; j<=m2.col; j++)
for(int k=; k<=m1.col; k++)
m3.matr[i][j]=(m3.matr[i][j]+m1.matr[i][k]*m2.matr[k][j])%MOD;
return m3;
} void matr_givevalue(Matrix& a,Matrix b)
{
a.row=b.row;
a.col=b.col;
for(int i=; i<=a.row; i++)
for(int j=; j<=a.col; j++)
a.matr[i][j]=b.matr[i][j];
} Matrix matr_pow(Matrix m1,int k) //矩阵快速幂
{
Matrix m2;
matr_givevalue(m2,m1);
k--;
while(k>)
{
if(k&)
m2=matr_multi(m2,m1);
m1=matr_multi(m1,m1);
k>>=;
}
return m2;
} LL PowMod(LL n,int k) //常规快速幂
{
LL res=;
while(k>)
{
if(k&)
res=(res*n)%MOD;
n=(n*n)%MOD;
k>>=;
}
return res;
} void matr_output(Matrix m)
{
for(int i=; i<=m.row; i++)
{
for(int j=; j<=m.col; j++)
cout<<m.matr[i][j]<<" ";
cout<<endl;
}
}
int main()
{
LL f1,f2,n;
while(scanf("%lld%lld%lld",&f1,&f2,&n)!=EOF)
{
Matrix m1(,);
m1.matr[][]=f1;
m1.matr[][]=f2;
m1.matr[][]=(f1+f2+Sin[])%MOD;
m1.matr[][]=(m1.matr[][]+m1.matr[][]+Sin[])%MOD;
Matrix m2(,,);
m2.matr[][]=m2.matr[][]=m2.matr[][]=m2.matr[][]=;
m2.matr[][]=m2.matr[][]=;
if(n>)
{
m2=matr_pow(m2,n-);
m1=matr_multi(m1,m2);
printf("%lld\n",m1.matr[][]);
}
else
{
printf("%lld\n",m1.matr[][-n]);
}
} return ;
}

 

 

dutacm.club_1085_Water Problem_(矩阵快速幂)的更多相关文章

  1. hdu 1757 A Simple Math Problem_矩阵快速幂

    题意:略 简单的矩阵快速幂就行了 #include <iostream> #include <cstdio> #include <cstring> using na ...

  2. dutacm.club Water Problem(矩阵快速幂)

    Water Problem Time Limit:3000/1000 MS (Java/Others)   Memory Limit:163840/131072 KB (Java/Others)Tot ...

  3. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  4. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  5. 51nod 1113 矩阵快速幂

    题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...

  6. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

  7. HDU5950(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f(n) = f(n-1) + 2*f(n-2) + n^4,f(1) = a , f(2 ...

  8. 51nod 1126 矩阵快速幂 水

    有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...

  9. hdu2604(递推,矩阵快速幂)

    题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...

随机推荐

  1. rsync 3.1.1源代码编译安装配置

    http://rsync.samba.org/ rsync-3.1.1.tar.gz ---0.卸载rpm # yum remove rsync -----1.安装: tar -zxvf rsync- ...

  2. vbs io file

    <% ''/*******************************二进制文件操作类************************************ ''/*作者:死在水中的鱼(死 ...

  3. Javascript基本概念梳理

    javascript里的数据类型: 原始类型:数字,字符串.布尔值.(原始值:null,undefined) 对象类型:键值对,数组,function,全局对象(MATH,JSON) 保留字: abs ...

  4. Web 设计与开发者必须知道的 15 个站点

    新闻来源:catswhocode.com公司博客整整一个月没有更新了,最近一段时间,全公司都忙于两件事,为海尔集团做定制,为一个合作伙伴做 OEM,终于有了眉目.工作期间,常用到一些工具与帮助站点,今 ...

  5. 【OI新闻】2016.10.06

    今天有人说好多OJ都狗记邓了- 翻了一下,恭喜以下OJ赢得大奖,获得狗记邓徽章一枚 一等奖Codevs 二等奖Bzoj 三等奖洛谷 后记-感悟 如果正在为OJ发愁的朋友,不要悲伤,不要心急,换一换OJ ...

  6. [翻译]NUnit---String && Collection && File && Directory Assert (七)

    StringAssert (NUnit 2.2.3) StringAssert类提供一系列检查字符串的方法. CollectionAssert (NUnit 2.4 / 2.5) Collection ...

  7. [Codeforces 482A] Diverse Permutation

    [题目链接] https://codeforces.com/contest/482/problem/A [算法] 首先构造一个(k + 1)个数的序列 , 满足它们的差为1-k 对于i > k ...

  8. 洛谷P1297 单选错位——期望

    题目:https://www.luogu.org/problemnew/show/P1297 读懂题后就变得很简单啦: 对于一个问题和它的下一个问题,我们考虑: 设上一个问题有 a 个选项,下一个问题 ...

  9. JSP-Runoob:JSP 教程

    ylbtech-JSP-Runoob:JSP 教程 1.返回顶部 1. JSP 教程 JSP 与 PHP.ASP.ASP.NET 等语言类似,运行在服务端的语言. JSP(全称Java Server ...

  10. C++中虚析构函数的作用 (转载)

    转自:http://blog.csdn.net/starlee/article/details/619827 我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数.可是,为什么要这样做 ...