zoukankan      html  css  js  c++  java
  • 一本通1645Fibonacci

    1645:Fibonacci

    时间限制: 1000 ms         内存限制: 524288 KB

    【题目描述】

    原题来自:POJ 3070

    我们知道斐波那契数列 F0=0,F1=1,Fn=Fn1+Fn2

    求 Fmod 104 。

    【输入】

    多组数据,每组数据一行,一个整数 n。

    输入以 −1 结束。

    【输出】

    对于每组数据,输出 Fmod 104 。

    【输入样例】

    0
    9
    999999999
    1000000000
    -1

    【输出样例】

    0
    34
    626
    6875

    【提示】

    数据范围与提示:

    对于全部数据,0n109 。

    sol:一个板子

    /*
        1 1
        1 0
    */
    #include <bits/stdc++.h>
    using namespace std;
    typedef int ll;
    inline ll read()
    {
        ll s=0;
        bool f=0;
        char ch=' ';
        while(!isdigit(ch))
        {
            f|=(ch=='-'); ch=getchar();
        }
        while(isdigit(ch))
        {
            s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
        }
        return (f)?(-s):(s);
    }
    #define R(x) x=read()
    inline void write(ll x)
    {
        if(x<0)
        {
            putchar('-'); x=-x;
        }
        if(x<10)
        {
            putchar(x+'0'); return;
        }
        write(x/10);
        putchar((x%10)+'0');
        return;
    }
    #define W(x) write(x),putchar(' ')
    #define Wl(x) write(x),putchar('
    ')
    const int Mod=10000;
    int n;
    int ans[5][5],power[5][5],a[5][5],c[5][5];
    inline void Ad(int &x,int y)
    {
        x+=y;
        x-=(x>=Mod)?Mod:0;
        return;
    }
    int main()
    {
        while(true)
        {
            int i,j,k;
            R(n);
            if(n==-1) break;
            if(n==0) {puts("0"); continue;}
            n--;
            ans[1][1]=1; ans[1][2]=0;
            power[1][1]=power[2][2]=1; power[1][2]=power[2][1]=0;
            a[1][1]=a[1][2]=a[2][1]=1; a[2][2]=0;
            while(n)
            {
                if(n&1)
                {
                    memset(c,0,sizeof c);
                    for(i=1;i<=2;i++) for(j=1;j<=2;j++) for(k=1;k<=2;k++)
                    {
                        Ad(c[i][j],power[i][k]*a[k][j]%Mod);
                    }
                    memmove(power,c,sizeof power);
                }
                memset(c,0,sizeof c);
                for(i=1;i<=2;i++) for(j=1;j<=2;j++) for(k=1;k<=2;k++)
                {
                    Ad(c[i][j],a[i][k]*a[k][j]%Mod);
                }
                memmove(a,c,sizeof a);
                n>>=1;
            }
            memset(c,0,sizeof c);
            for(i=1;i<=1;i++) for(j=1;j<=2;j++) for(k=1;k<=2;k++)
            {
                Ad(c[i][j],ans[i][k]*power[k][j]%Mod);
            }
            memmove(ans,c,sizeof ans);
            Wl(ans[1][1]);
        }
        return 0;
    }
    /*
    input
    0
    9
    999999999
    1000000000
    -1
    output
    0
    34
    626
    6875
    */
    View Code
  • 相关阅读:
    jmeter 参数化测试
    jmeter属性与变量
    jmeter作用域规则
    jmeter执行顺序
    jmeter元素
    Array Transformer UVA
    A Simple Problem with Integers POJ
    分块 && 例题 I Hate It HDU
    c文件二进制读取写入文件、c语言实现二进制(01)转化成txt格式文本、c读取文件名可变
    sort排序使用以及lower_bound( )和upper_bound( )
  • 原文地址:https://www.cnblogs.com/gaojunonly1/p/10505668.html
Copyright © 2011-2022 走看看