zoukankan      html  css  js  c++  java
  • 蓝桥杯 研究兔子的土豪(疯狂雇主) 矩阵快速幂

    问题描述
      如果你还没有看过研究兔子的土豪,那么请你先去看那道题。
      HWD老师研究兔子时的某天,他突然不幸的发作了他的密集恐惧症,于是只能放了他的所有兔子……然后,他还是想去研究兔子,于是捡回了他那个伟大的笼子,又买了许多兔子……他依旧开始研究,发现这两批兔子的繁衍规律完全相同……他就这么让兔子繁衍着,直到某天,他怕他的密集恐惧症重新发作,于是,他又找到了那个雇主,但这个雇主的强迫症加重了,他只每次收购10^9+7只兔子,HWD老师再次尽量多的卖出了他已久的兔子,再次数着剩下陪伴他的它们……
      后来,HWD老师知道了两次收购他兔子的那个人其实叫LZH……
    输入格式
      HWD老师让兔子繁衍了几代(一个整数,没有其他字符)。
    输出格式
      HWD老师剩余(残余?)的兔子(一个整数,忽略行尾回车及空格)。
    样例输入
    1
    样例输出
    1
    数据规模和约定
      兔子的总量最大时小于HWD老师笼子的大小。
      f[1]=1,f[2]=1,f[3]=2 ……
    这又是一件悲伤的故事。
    这是这道题https://www.cnblogs.com/fx1998/p/12712789.html的数据强化版,需要再配合矩阵快速幂。
    然后然后在把以前的矩阵快速幂模板拿过来改了改发现又出错了,然后然后又从头复习了一遍矩阵快速幂,然后然后一点一点的debug。
    然后然后发现又又又是取模的细节操作错了。
    得出结论:矩阵快速幂还是不熟练。
    AC代码
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int p = 1000000007;
     4 typedef long long ll;
     5 struct Mat {
     6     ll m[2][2];
     7 } ans, base; //ans为答案矩阵, base为需要求次方的矩阵 
     8 Mat Mul(Mat x, Mat y) { //返回矩阵x乘以矩阵y的矩阵 
     9     Mat c;
    10     for (int i = 0; i < 2; i++) {
    11         for (int j = 0; j < 2; j++) {
    12             c.m[i][j] = 0;
    13             for (int k = 0; k < 2; k++) {
    14                 c.m[i][j] += (x.m[i][k] % p * y.m[k][j] % p) % p;
    15             }
    16         }
    17     }
    18     return c;
    19 }
    20 void quick_pow(ll n) { //求base的n-1次方 
    21     while (n) { //同一般的快速幂 
    22         if (n & 1) {
    23             ans = Mul(ans, base);
    24         }
    25         base = Mul(base, base);
    26         n >>= 1;
    27     }
    28 }
    29 int main() {
    30     ll n;
    31     cin >> n;
    32     n %= 2000000016;
    33     ans.m[0][0] = 1, ans.m[0][1] = 0, ans.m[1][0] = 0, ans.m[1][1] = 1; //初始化ans为单位矩阵,
    34     base.m[0][0] = 1, base.m[0][1] = 1, base.m[1][0] = 1, base.m[1][1] = 0; //将base初始化为要求n次幂的矩阵
    35     quick_pow(n);
    36     cout << ans.m[0][1] % p << endl;
    37     return 0;
    38 }
  • 相关阅读:
    UOJ 30 【CF Round #278】Tourists
    CodeForces 1070F Katya and Segments Sets
    Django系列3:Model的简单对接
    Django系列2:MTV简单流程
    python virtualenv
    vscode使用
    Django 系列1:Django简介
    vue-cli3/4 vue ui创建elementui项目
    npm安装参数
    vue系列11:vuex
  • 原文地址:https://www.cnblogs.com/fx1998/p/12713243.html
Copyright © 2011-2022 走看看