• Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences (矩阵快速幂)


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

    题意很好懂,矩阵快速幂模版题。

     1 /*
     2     | 1, -1 | | fn   |
     3     | 1,  0 | | fn-1 |
     4 */
     5 #include <iostream>
     6 #include <cstdio>
     7 #include <cstring>
     8 using namespace std;
     9 typedef __int64 LL;
    10 LL mod = 1e9 + 7;
    11 struct data {
    12     LL mat[3][3];
    13 };
    14 
    15 data operator* (data a , data b) {
    16     data res;
    17     for(int i = 1 ; i <= 2 ; i++) {
    18         for(int j = 1 ; j <= 2 ; j++) {
    19             res.mat[i][j] = 0;
    20             for(int k = 1 ; k <= 2 ; k++) {
    21                 res.mat[i][j] = ((a.mat[i][k]*b.mat[k][j] % mod) + res.mat[i][j]) % mod;
    22             }
    23         }
    24     }
    25     return res;
    26 }
    27 
    28 data operator^ (data a , LL n) {
    29     data res;
    30     for(int i = 1 ; i <= 2 ; i++) {
    31         for(int j = 1 ; j <= 2 ; j++) {
    32             res.mat[i][j] = (i == j);
    33         }
    34     }
    35     while(n) {
    36         if(n & 1)
    37             res = a * res;
    38         a = a * a;
    39         n >>= 1;
    40     }
    41     return res;
    42 }
    43 
    44 int main()
    45 {
    46     data res;
    47     LL n;
    48     cin >> res.mat[2][1] >> res.mat[1][1] >> n;
    49     if(n == 1) {
    50         cout << (res.mat[2][1] % mod + mod) % mod << endl;
    51     }
    52     else if(n == 2) {
    53         cout << (res.mat[1][1] % mod + mod) % mod << endl;
    54     }
    55     else {
    56         data a;
    57         a.mat[2][1] = a.mat[1][1] = 1;
    58         a.mat[2][2] = 0;
    59         a.mat[1][2] = -1;
    60         a = a ^ (n - 2);
    61         res = a * res;
    62         cout << (res.mat[1][1] % mod + mod) % mod << endl;
    63     }
    64 }
  • 相关阅读:
    「学习笔记」min_25筛
    HNOI2019游记
    【SDOI2017】数字表格
    【APIO2016】烟火表演
    【SCOI2015】小凸想跑步
    java Thread源码分析
    java ThreadGroup源码分析
    bean获取Spring容器
    spring 管理bean
    thinkphp5.0.19 request
  • 原文地址:https://www.cnblogs.com/Recoder/p/5346488.html
Copyright © 2020-2023  润新知