poj 3070 Fibonacci (矩阵构造,水)

来源:互联网 发布:网络推广平台哪个好 编辑:程序博客网 时间:2024/05/22 14:23
#include<iostream>#include<math.h>#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>#include<queue>#include<map>#include<set>using namespace std;#define B(x) (1<<(x))typedef long long ll;const int oo=0x3f3f3f3f;const ll OO=1LL<<61;const ll MOD=10000;const int maxn=2;int n;int val[100005];struct Matrix{    ll maze[2][2];    friend Matrix operator*(Matrix a,Matrix b)    {        Matrix c;        memset(c.maze,0,sizeof c.maze);        for(int i=0;i<2;i++)            for(int j=0;j<2;j++)                for(int k=0;k<2;k++)                    c.maze[i][j]=(c.maze[i][j]+a.maze[i][k]*b.maze[k][j]+MOD)%MOD;        return c;    }    friend Matrix operator^(Matrix a,ll k)    {        Matrix c;        for(int i=0;i<2;i++)            for(int j=0;j<2;j++)                c.maze[i][j]=(i==j);        while(k)        {            if(k&1)                c=c*a;            a=a*a;            k>>=1;        }        return c;    }};int main(){    int n;    Matrix A;    A.maze[0][0]=1;A.maze[0][1]=1;    A.maze[1][0]=1;A.maze[1][1]=0;    while(scanf("%d",&n)!=EOF)    {        if(n==-1)break;        Matrix ans=A^n;        cout<<ans.maze[1][0]<<endl;    }    return 0;}

0 0