codeforces 450-B Jzzhu and Sequences 矩阵快速幂
2017-08-10 19:48
489 查看
B. Jzzhu and Sequences
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Jzzhu has invented a kind of sequences, they meet the following property:
You are given x and y,
please calculate fn modulo 1000000007 (109 + 7).
Input
The first line contains two integers x and y (|x|, |y| ≤ 109).
The second line contains a single integer n (1 ≤ n ≤ 2·109).
Output
Output a single integer representing fn modulo 1000000007 (109 + 7).
Examples
input
output
input
output
Note
In the first sample, f2 = f1 + f3, 3 = 2 + f3, f3 = 1.
In the second sample, f2 = - 1; - 1 modulo (109 + 7) equals (109 + 6).
矩阵快速幂入门题吧,建立矩阵模型,算出来那个A,然后就可以ac了
ac代码(注意用long long):#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <set>
#define ll long long
using namespace std;
const ll mod=1e9+7;
struct node{
ll a[2][2];
void init(){
a[0][0]=1;
a[0][1]=-1;
a[1][0]=1;
a[1][1]=0;
}
};
node matrixmul(node a,node b){
int i,j,k;
node c;
c.a[0][0]=c.a[0][1]=c.a[1][0]=c.a[1][1]=0;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
for(k=0;k<2;k++){
c.a[i][j]+=(a.a[i][k]*b.a[k][j]);
}
c.a[i][j]%=mod;
}
}
return c;
}
node mul(node s,ll k){
node ans;
//ans.init();
ans.a[0][0]=ans.a[1][1]=1;
ans.a[0][1]=ans.a[1][0]=0;
while(k>=1){
if(k&1)
ans=matrixmul(ans,s);
k>>=1;
s=matrixmul(s,s);
}
return ans;
}
int main()
{
ll x,y,n;
while(~scanf("%lld%lld",&x,&y)){
scanf("%d",&n);
if(n==1){
printf("%lld\n",(x%mod + mod)%mod);
}
else if(n==2){
printf("%lld\n",(y%mod + mod)%mod);
}
else{
node s;
s.init();
s=mul(s, );
printf("%lld\n",(( s.a[0][0]*y+s.a[0][1]*(x) ) % mod+mod) % mod);
}
}
return 0;
}
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Jzzhu has invented a kind of sequences, they meet the following property:
You are given x and y,
please calculate fn modulo 1000000007 (109 + 7).
Input
The first line contains two integers x and y (|x|, |y| ≤ 109).
The second line contains a single integer n (1 ≤ n ≤ 2·109).
Output
Output a single integer representing fn modulo 1000000007 (109 + 7).
Examples
input
2 3 3
output
1
input
0 -12
output
1000000006
Note
In the first sample, f2 = f1 + f3, 3 = 2 + f3, f3 = 1.
In the second sample, f2 = - 1; - 1 modulo (109 + 7) equals (109 + 6).
矩阵快速幂入门题吧,建立矩阵模型,算出来那个A,然后就可以ac了
ac代码(注意用long long):#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <set>
#define ll long long
using namespace std;
const ll mod=1e9+7;
struct node{
ll a[2][2];
void init(){
a[0][0]=1;
a[0][1]=-1;
a[1][0]=1;
a[1][1]=0;
}
};
node matrixmul(node a,node b){
int i,j,k;
node c;
c.a[0][0]=c.a[0][1]=c.a[1][0]=c.a[1][1]=0;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
for(k=0;k<2;k++){
c.a[i][j]+=(a.a[i][k]*b.a[k][j]);
}
c.a[i][j]%=mod;
}
}
return c;
}
node mul(node s,ll k){
node ans;
//ans.init();
ans.a[0][0]=ans.a[1][1]=1;
ans.a[0][1]=ans.a[1][0]=0;
while(k>=1){
if(k&1)
ans=matrixmul(ans,s);
k>>=1;
s=matrixmul(s,s);
}
return ans;
}
int main()
{
ll x,y,n;
while(~scanf("%lld%lld",&x,&y)){
scanf("%d",&n);
if(n==1){
printf("%lld\n",(x%mod + mod)%mod);
}
else if(n==2){
printf("%lld\n",(y%mod + mod)%mod);
}
else{
node s;
s.init();
s=mul(s, );
printf("%lld\n",(( s.a[0][0]*y+s.a[0][1]*(x) ) % mod+mod) % mod);
}
}
return 0;
}
相关文章推荐
- codeforces 450B B. Jzzhu and Sequences(矩阵快速幂)
- codeforces - 450 - B - Jzzhu and Sequences 【简单的矩阵快速幂】
- Jzzhu and Sequences CodeForces - 450B (矩阵快速幂)
- Codeforces 450B-Jzzhu and Sequences (矩阵快速幂)
- CF 450 B Jzzhu and Sequences(矩阵快速幂)
- 【矩阵快速幂 】Codeforces 450B - Jzzhu and Sequences (公式转化)
- codeforces 450 B Jzzhu and Sequences
- CodeForces 450-B. Jzzhu and Sequences
- Codeforces 450 B. Jzzhu and Sequences
- Jzzhu and Sequences - CF 450B 矩阵快速幂版
- Codeforces Round #257(Div. 2) B. Jzzhu and Sequences(矩阵快速幂)
- hdu-4686 Jzzhu and Sequences 【矩阵快速幂】
- Codeforces 450 B. Jzzhu and Sequences
- Jzzhu and Sequences 【矩阵快速幂】
- Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences (矩阵快速幂)
- [Codeforces 719 E. Sasha and Array] 矩阵快速幂+线段树
- Codeforces Round #257 (Div. 2) 450B - Jzzhu and Sequences(循环节或矩阵快速幂)
- CodeForces 450-A. Jzzhu and Children
- codeforces 514E E. Darth Vader and Tree(矩阵快速幂 )
- codeforces 257div2 B. Jzzhu and Sequences(细节决定一切)