链接:https://www.nowcoder.com/acm/contest/136/J
来源:牛客网

洋灰是一种建筑材料,常用来筑桥搭建高层建筑,又称,水泥、混凝土。
WHZ有很多铸造成三角形的洋灰块,他想把这些洋灰三角按照一定的规律放到摆成一排的n个格子里,其中第i个格子放入的洋灰三角数量是前一个格子的k倍再多p个,特殊地,第一个格子里放1个。
    WHZ想知道把这n个格子铺满需要多少洋灰三角。
题意:就是求  an=k*an-1+p的前n项和。
第一种:  sn=sn-1+k*an-1+p;
推出的矩阵如下:

代码:

#include<cstdio>
#include<cstring>
#define ll long long
#define mod int(1e9+7)
ll k, p;
struct jz
{ll num[3][3];jz(){ memset(num, 0, sizeof(num)); }jz operator*(const jz &p){jz ans;for (int k = 0; k < 3;++k)for (int i = 0; i < 3;++i)for (int j = 0; j < 3; ++j)ans.num[i][j] = (ans.num[i][j] + num[i][k] * p.num[k][j] % mod) % mod;return ans;}
}pp;
jz POW(jz x, ll n)
{jz ans;for (int i = 0; i < 3; i++) ans.num[i][j] = 1;for (; n; n>>=1, x=x*x)if (n & 1)ans = ans*x;return ans;
}
void init()
{pp.num[0][0] = 1; pp.num[0][1] = k; pp.num[0][2] = 1;pp.num[1][1] = k; pp.num[1][2] = 1; pp.num[2][2] = 1;
}
int main()
{ll n;scanf("%d%d%d", &n, &k, &p);ll s2 = 1 + k + p;if (n == 1){ printf("1\n"); return 0; }else if (n == 2){ printf("%lld\n", s2); return 0; }init();pp = POW(pp, n - 2);printf("%lld", (pp.num[0][0] + pp.num[0][1] + (p*pp.num[0][2])%mod) % mod);return 0;
}

方法二:

sn=(k+1)sn-1-ksn-2+q

注意:在矩阵中负数要  -k <=> mod-k; 还有:已经使用了上面的公式,意味着sn是新的数列,注意把s1和s2求好。仔细一些

#include<cstdio>
#include<cstring>
#define ll long long
#define mod int(1e9+7)
ll p, k;
struct jz
{long long num[3][3];jz() { memset(num, 0, sizeof(num)); }jz operator*(const jz &P)const{jz ans;for (int k = 0; k<3; k++)for (int i = 0; i<3; i++)for (int j = 0; j<3; j++)ans.num[i][j] = (ans.num[i][j] + num[i][k] * P.num[k][j] % mod) % mod;return ans;}
}pp;
jz pOw(jz X, long long m)
{jz ans;for (int i = 0; i < 3; ++i)ans.num[i][i] = 1;for (; m; m >>= 1, X = X*X)if (m & 1)ans = ans*X;return ans;
}
void init()
{pp.num[0][0] = k + 1; pp.num[0][1] = mod-k; pp.num[0][2] = p;pp.num[1][0] = 1; pp.num[2][2] = 1;
}
int main()
{ll n;scanf("%lld%lld%lld", &n, &k, &p);init();ll s1 = 1, s2 = k + p+1;if (n == 2){ printf("%lld\n", s2); return 0; }else if (n == 1){ printf("%lld\n", 1); return 0; }pp = pOw(pp, n - 2);printf("%lld\n", (((s2%mod)*pp.num[0][0])%mod + pp.num[0][1] + pp.num[0][2]) % mod);return 0;
}

转载于:https://www.cnblogs.com/ALINGMAOMAO/p/9500268.html

洋灰三角(矩阵快速幂的两种解法)相关推荐

  1. 洋灰三角 矩阵快速幂

    洋灰三角 矩阵快速幂 我的思路: 先定义一个矩阵,然后通过矩阵的相乘,实现n>>1的效果. 我的解法:(满分答案) //#include<bits/stdc++.h> #inc ...

  2. 完全理解乘法快速幂及其两种写法的解析

    an=?0≤n≤10105an=?0≤n≤10105 a^n=? \qquad 0 \le n \le 10^{10^5} 没错,乘法快速幂就是解决上述问题的. 乘法快速幂的思想 可以看到,要求一个数 ...

  3. leetcode 73 矩阵置零 C++ 两种解法

    leetcode 73 两种解法~~,没有一个是我想出来的,哈哈~~ one class Solution {public:void setZeroes(vector<vector<int ...

  4. 【C语言】杨辉三角常用且简单的两种解法(超详细解说)

    学习就是重复重复再重复!!! ​​​​​​​​​​​​​​ 目录

  5. 矩阵快速幂及斐波那契数列

    1.通用模板:矩阵快速幂 前几天写过一篇矩阵快速幂的一种解法,但是当时只是初学,所以用了当时我更好理解的方法去做.那个解法需要调用两个很相像的函数,而且容易造成紊乱,也不利于矩阵快速幂的推广,所以在观 ...

  6. 1005 矩阵快速幂

    1005 矩阵快速幂 本体有2种方法,一种是矩阵快速幂,一种是找规律.我用的是矩阵快速幂. f(1)=1; f(2)=1; f(n)=( A*(f(n-1)) + B*(f(n-2)) )mod7; ...

  7. 矩阵快速幂的学习(系统的学习)

    学习博客:https://www.cnblogs.com/cmmdc/p/6936196.html https://www.cnblogs.com/yan-boy/archive/2012/11/29 ...

  8. C语言实现求解斐波那契数列的四种方法及优化处理(递归,迭代,特殊性质公式,矩阵快速幂)

    众所周知,斐波那契数列是非常经典的一个数列,它的数学公式如下 为了便于观察,我们列出它的几项:0  1  1  2  3  5  8  13  21...... 下面我们将介绍四种方法来用C语言计算机 ...

  9. 【做题】SRM701 Div1 Hard - FibonacciStringSum——数学和式&矩阵快速幂

    原文链接 https://www.cnblogs.com/cly-none/p/SRM701Div1C.html 题意:定义"Fibonacci string"为没有连续1的01串 ...

最新文章

  1. 第十五周程序阅读-范型程序设计(5)
  2. sql php修改mysql结构_sql怎么修改表内容
  3. mysql 拼音查询_mysql实现用拼音搜索中文的数据库实现
  4. CentOS 修改IP地址, DNS, 网关
  5. 单片机按键软硬件设计技巧!
  6. 使用标定板对相机位姿进行估计
  7. U-BOOT之一:BootLoader 的概念与功能
  8. java列表展开折叠,jQuery Datatables rowGroup折叠/展开
  9. 使用Navicat为数据库表建立触发器
  10. 算法工程师面试备战笔记7_数据清洗与特征处理
  11. 和阿里同年创办,为何当当却走向了“卖身”的结局?
  12. PHP 数组拼接成字符串
  13. Android开发之常见事件响应方式
  14. freeradius mysql_centos7 freeradius mysql配置
  15. poi批量导入html,读取excel(POI)【转换为html】 - bcoffee的专栏 - 博客频道 - CSDN.NET...
  16. smartbi v7 Linux,安装Smartbi
  17. #9733;电车难题的n个坑爹变种
  18. 第三方远程控制工具TeamViewer的安装和使用教程,可下载window版和linux版,windows使用虚拟机可以与linux之间通讯
  19. RV-LINK:将 GD32VF103C-START 开发板变成 RISCV-V 仿真器
  20. 各大互联网大厂年终奖一览表,又是别人家的公司!

热门文章

  1. 上瘾:让用户养成使用习惯的四大产品逻辑
  2. 导盲背包或将代替导盲犬:这款视障者的智能出行方案值得围观
  3. 应届生实习时一些建议
  4. python自动化工业_五大python自动化框架学习
  5. 蓝湖切图后如何做成html,蓝湖支持「切图压缩」了!
  6. QtQuick PC端开发实战_专栏总目录
  7. 2022 IoTDB Summit:阿里白渐《迈向物联网时代大数据计算平台——MaxCompute 基于IoTDB构建解决方案》...
  8. 清洁机器人--沿边测距传感器 sharp psd红外传感器的FOV角度分析
  9. Brightcove发布新视频压缩技术测试版
  10. 软件调研:CSDN 问答 VS StackOverFlow