zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 13 D. Iterated Linear Function (矩阵快速幂)

    题目链接:http://codeforces.com/problemset/problem/678/D

    简单的矩阵快速幂模版题

    矩阵是这样的:234

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef __int64 LL;
     4 struct data {
     5     LL mat[3][3];
     6 };
     7 LL mod = 1e9 + 7;
     8 
     9 data operator *(data a , data b) {
    10     data res;
    11     for(int i = 1 ; i <= 2 ; ++i) {
    12         for(int j = 1 ; j <= 2 ; ++j) {
    13             res.mat[i][j] = 0;
    14             for(int k = 1 ; k <= 2 ; ++k) {
    15                 res.mat[i][j] = (a.mat[i][k] * b.mat[k][j] % mod + res.mat[i][j]) % mod;
    16             }
    17         }
    18     }
    19     return res;
    20 }
    21 
    22 data operator ^(data a , LL n) {
    23     data res;
    24     for(int i = 1 ; i <= 2 ; ++i) {
    25         for(int j = 1 ; j <= 2 ; ++j) {
    26             res.mat[i][j] = i == j;
    27         }
    28     }
    29     while(n) {
    30         if(n & 1)
    31             res = res * a;
    32         a = a * a;
    33         n >>= 1;
    34     }
    35     return res;
    36 }
    37 
    38 int main()
    39 {
    40     LL a , b , n , x;
    41     cin >> a >> b >> n >> x;
    42     data temp , res;
    43     temp.mat[1][1] = a % mod , temp.mat[1][2] = 0 , temp.mat[2][1] = b % mod, temp.mat[2][2] = 1;
    44     res.mat[1][1] = x % mod , res.mat[1][2] = 1 , res.mat[2][1] = res.mat[2][2] = 0;
    45     temp = temp ^ n;
    46     res = res * temp;
    47     cout << res.mat[1][1] << endl;
    48     return 0;
    49 }
  • 相关阅读:
    lightoj1422_区间dp
    hdu4283_动态规划
    51nod1201_dp思维题
    uestc1218_变形01背包
    hdu5492_枚举dp
    hdu3507_斜率dp
    hdu 1116 Play on Words
    并查集专题
    uva 10160
    uva 572
  • 原文地址:https://www.cnblogs.com/Recoder/p/5601043.html
Copyright © 2011-2022 走看看