Codeforces Round #258 (Div. 2) B. Jzzhu and Sequences(矩阵快速幂)_html/css_WEB-ITnose

php中文网
发布: 2016-06-24 12:01:33
原创
985人浏览过

题目链接:http://codeforces.com/problemset/problem/450/b

----------------------------------------------------------------------------------------------------------------------------------------------------------
登录后复制
欢迎光临天资小屋:http://user.qzone.qq.com/593830943/main
登录后复制
----------------------------------------------------------------------------------------------------------------------------------------------------------
登录后复制


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).

乾坤圈新媒体矩阵管家
乾坤圈新媒体矩阵管家

新媒体账号、门店矩阵智能管理系统

乾坤圈新媒体矩阵管家 17
查看详情 乾坤圈新媒体矩阵管家

Sample test(s)

input

2 33
登录后复制

output

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).


代码如下:

#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct A{    int mat[2][2];};A d,f;__int64 n,mod;A mul(A a,A b){    A t;    memset(t.mat,0,sizeof(t.mat));    for(int i=0;i<n;i++)    {        for(int k=0;k<n;k++)        {            if(a.mat[i][k])                for(int j=0;j<n;j++)                {                    t.mat[i][j]+=a.mat[i][k]*b.mat[k][j];                    t.mat[i][j]%=mod;                }        }    }    return t;}A quickP(int k){    A p = d ,m;    memset(m.mat,0,sizeof(m.mat));    for(int i=0;i<n;++i)//单位矩阵    {        m.mat[i][i]=1;    }    while(k)    {        if(k & 1)            m=mul(m,p);        p=mul(p,p);        k >>= 1 ;    }    return m;}int main(){    n=2;    int k,t;__int64 x,y,z;    while(scanf("%I64d%I64d",&x,&y)!=EOF)    {        int s=0;        scanf("%I64d",&z);        mod=1000000007;        if(z == 1)        {            if(x < 0)                printf("%I64d\n",x+mod);            else                printf("%I64d\n",x);            continue;        }        d.mat[0][1]=-1;d.mat[1][1] = 0;        d.mat[0][0]=d.mat[1][0]=1;        A ret=quickP(z-2);//z-2 乘的次数        __int64 ans=(ret.mat[0][0]*y%mod+ret.mat[0][1]*x%mod)%mod;        if(ans < 0)            ans+=mod;        printf("%I64d\n",ans);    }    return 0;}
登录后复制


HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号