FZU 1683

矩阵的快速幂

sn     1 1 0 0  sn-1

fn+1  = 0 3 2 7*  fn

fn     0 1 0 0  fn-1

fn-1    0 0 1 0   fn-2

#include <iostream>
#include <string.h>
using namespace std;
int n;
struct M{
    int t[4][4];
    M(){
        memset(t,0,sizeof(t));
    }
    void init(){
        t[0][0]=t[0][1]=t[2][1]=t[3][2]=1;
        t[1][1]=3;
        t[1][2]=2;
        t[1][3]=7;
    }
    void E(){
        for(int i=0;i<4;i++){
            t[i][i]=1;
        }
    }
};
M multiply(M a,M b){
    M c;
    for(int i=0;i<4;i++){
        for(int j=0;j<4;j++){
            for(int k=0;k<4;k++){
                c.t[i][j]=(c.t[i][j]+a.t[i][k]*b.t[k][j])%2009;
            }
        }
    }
    return c;
}
M powM(M a,int k){
    M tem;
    tem.E();
    while(k){
        if(k&1)tem=multiply(a,tem);
        a=multiply(a,a);
        k>>=1;
    }
    return tem;
}
int main(){
    int t;
    cin>>t;
    M a,b,c;
    a.t[0][0]=4;
    a.t[1][0]=5;
    a.t[2][0]=3;
    a.t[3][0]=1;
    b.init();
    for(int i=1;i<=t;i++){
        cin>>n;
        cout<<"Case "<<i<<": ";
        if(n==0)cout<<"1\n";
        else {
            c=powM(b,n-1);
            c=multiply(c,a);
            cout<<c.t[0][0]<<endl;
        }

}
    return 0;
}

FZU 1683

时间: 2024-11-11 14:44:44

FZU 1683的相关文章

FZU 1683 纪念SlingShot

Problem 1683 纪念SlingShot Accept: 561    Submit: 1969Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description 已知 F(n)=3 * F(n-1)+2 * F(n-2)+7 * F(n-3),n>=3,其中F(0)=1,F(1)=3,F(2)=5,对于给定的每个n,输出F(0)+ F(1)+ …… + F(n) mod 2009. Input 第一行是一整数m,代表

FZU - 1683 纪念SlingShot 矩阵快速幂

题目大意:已知 F(n)=3 * F(n-1)+2 * F(n-2)+7 * F(n-3),n>=3,其中F(0)=1,F(1)=3,F(2)=5,对于给定的每个n,输出F(0)+ F(1)+ -- + F(n) mod 2009. 解题思路:借用别人的图 这题和HDU - 1757 A Simple Math Problem和相似,只不过这题多了个和,其实思路是差不多的 #include<cstdio> #include<cstring> #define mod 2009

矩阵专题

1)矩阵快速幂 POJ - 3070 .HDU - 1575 .| 2)矩阵快速幂+玄学 *HDU - 3117.LightOJ - 1070  *HDU - 3306.| HDU - 3483.**HDU - 4566.*HDU - 4565. *FZU - 1692 3)组合恒等变换构造矩阵 *HDU - 2855| 5)矩阵维护线性递推式 *HDU - 2604.LightOJ - 1131.LightOJ - 1142.HDU - 1757 .HDU - 1005.*HDU - 1588

FZU 2150 Fire Game(点火游戏)

p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-size: 10.5000pt } h2 { margin-top: 5.0000pt; margin-bottom: 5.0000pt; text-align: left; font-family: 宋体; font-weight: bold; font-size: 18.0000pt } h3 {

FZU 1096 QS Network

QS Network Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on FZU. Original ID: 1096 64-bit integer IO format: %I64d      Java class name: Main In the planet w-503 of galaxy cgb, there is a kind of intelligent creature named QS.

1683 车厢重组 codevs

http://codevs.cn/problem/1683/ 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 白银 Silver 题目描述 Description 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转.一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序.于是他就负责用这座桥将进站的车厢按车厢号从小到大排列.他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序

FZU 1759 欧拉函数 降幂公式

Description Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,C<=1000000000,1<=B<=10^1000000). Input There are multiply testcases. Each testcase, there is one line contains three integers A, B and C, separated by a singl

ACM: FZU 2150 Fire Game - DFS+BFS+枝剪 或者 纯BFS+枝剪

FZU 2150 Fire Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows, M columns). At the beginning, each grid of this boar

FZU 2112 并查集、欧拉通路

原题:http://acm.fzu.edu.cn/problem.php?pid=2112 首先是,票上没有提到的点是不需要去的. 然后我们先考虑这个图有几个联通分量,我们可以用一个并查集来维护,假设有n个联通分量,我们就需要n-1条边把他们连起来. 最后对于每个联通分量来说,我们要使它能一次走完,就是要求他是否满足欧拉通路,也就是这个联通分量中至多有2个度为奇数的点,每多出2个度为奇数的点,就多需要一条边(因为单个连通分量的所有点的度数之和为偶数,所以不可能存在奇数个奇数度数的点). 1 #i