Codeforces 185A - Plant(矩阵快速幂)

这篇具有很好参考价值的文章主要介绍了Codeforces 185A - Plant(矩阵快速幂)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目来源:Problem - 185A - Codeforces

Codeforces 185A - Plant(矩阵快速幂)

题目大意:

矮人种植了一种非常有趣的植物,它是一个“向上”的三角形。这种植物有一个有趣的特点。一年后,“向上”的三角形植物分成四个三角形植物:其中三个指向“向上”,一个指向“向下”。再过一年,每个三角形植物分成四个三角形植物:其中三个方向与母植物相同,一个方向相反。然后每年这个过程都会重复。下图说明了这一过程。

Codeforces 185A - Plant(矩阵快速幂)


帮助小矮人找出n年内有多少“向上”的三角形植物,输出除以1000000007(1e9+7)的余数。

数据范围:0 ≤ n ≤ 10^18。

题目思路:找规律发现,结果=1+2+3+…+2^n mod 1e9+7=(1+2^n)*(2^n)/2 mod 1e9+7。要求2^n,循环复杂度O(n)肯定TLE(至少需要10^9秒,即31年),因此要使用快速幂。

什么是快速幂呢?

Codeforces 185A - Plant(矩阵快速幂)

 顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。

快速幂算法的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算。这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。

让我们先来看一个简单的例子:

3^10=3*3*3*3*3*3*3*3*3*3

3^10=(3*3)*(3*3)*(3*3)*(3*3)*(3*3)

3^10=(3*3)^5

3^10=9^5

9^5=(9^4)*(9^1)

9^5=(6561^1)*(9^1)

那么怎样用c++程序实现快速幂呢?大家先看一段讲解小视频:

所以我们来 look look 一道经典快速幂题:

输入:三个不超过 10000 的正整数 x,p,m。
输出:x^p mod m的值。

#include<iostream>
using namespace std;
int x, p, m, i, result;
int main(){	
    cin >> x >> p >> m;
	result = 1;
	while (p)
	{  if (p % 2 == 1)
			result = result*x%m;
		p /= 2;
		x = x*x%m;
	}
	cout << result << endl;
	return 0;
}

看完讲解视频以及基础习题,相信你已经基本掌握快速幂了。

因此回归正题,继续探究 A. Plant 。

AC代码:

Codeforces 185A - Plant(矩阵快速幂)

#include<bits/stdc++.h> 
using namespace std;
const long long mod=1000000007;

long long quickpow(long long x,long long y){
	long long ret=1;
	while(y){
		if(y%2) ret=ret*x%mod;
		y/=2;
		x=x*x%mod;
	}
	return ret;
}

int main(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	long long n,ans; cin>>n;
	ans=(quickpow(2,n)%mod)*((quickpow(2,n)+1)%mod);
	ans=ans/2%mod;
	cout<<ans;
	return 0;
}
//ACplease!!!

最后送大家一个小彩蛋:

点击链接免费下载Codeforces 185A - Plant 全测试点49个!

好了,下期再见啦!文章来源地址https://www.toymoban.com/news/detail-514878.html

到了这里,关于Codeforces 185A - Plant(矩阵快速幂)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【宝藏工具】开源组件信息一键查询,快速获取组件来源、版本、源码地址、漏洞补丁、推荐版本!

    铁子们,分享一个开源组件安全检索 免费工具,需要的自取~ 输入组件名,一键查询可以组件版本、来源、安全状态、漏洞详情和推荐版本、修复建议这些。 点这个链接注册后直接就能用:组件安全检索工具   一键查询第三方组件版本、漏洞、所属国家、所属语言、源码链

    2024年02月06日
    浏览(32)
  • 题目:2319.判断矩阵是否是 X 矩阵

    ​​ 题目来源:         leetcode题目,网址:2319. 判断矩阵是否是一个 X 矩阵 - 力扣(LeetCode) 解题思路:        遍历矩阵,对于每一个节点,先判断是否处于主对角线或副对角线上,然后判断是否为0 。 解题代码: 总结:         官方题解也是一样的思路。

    2024年02月14日
    浏览(34)
  • 瑞萨RA&e2studio快速上手视频笔记 四、瑞萨RA2L1资料来源和jlink rtt打印

    https://www2.renesas.cn/cn/en/products/microcontrollers-microprocessors/ra-cortex-m-mcus/ra2l1-48mhz-arm-cortex-m23-ultra-low-power-general-purpose-microcontroller 1.1 DatasheetUser\\\'s Manual 1.2 Documentation 1.3 Software Tools 1.4 Sample Code 1.5 Boards Kits https://github.com/renesas 2.1 fsp 2.2 ra-fsp-examples 2.3 amazon-freertos 2.4 rx-driver-package htt

    2023年04月21日
    浏览(27)
  • 快速排序题目&SelectK问题

    给定一个包含红色、白色和蓝色、共  n   个元素的数组  nums  , 原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数  0 、  1  和  2  分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函数的情况下解决这个问题。

    2024年04月17日
    浏览(51)
  • 用C语言写题目之“ 判断三角矩阵”

    本题要求编写程序,判断一个给定的方阵是否是三角矩阵。三角矩阵包含上三角矩阵和下三角矩阵两种。 上三角矩阵指主对角线以下的元素都为0的矩阵;下三角矩阵指主对角线以上的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。 输入矩阵是三种情况之一

    2024年01月22日
    浏览(50)
  • 题目:求一个3*3矩阵对角线元素之和

    题目:求一个3*3矩阵对角线元素之和 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should leave quickly. 1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加

    2024年04月17日
    浏览(37)
  • C语言题目:在杨氏矩阵中,寻找某个数字是否存在

    C语言题目:杨氏矩阵         这种矩阵,只需要一个二维数组就可以创建,查找时也只需要在二维数组里查找就可以了。         但是,如果这样查找,尝试过的人都知道,这样就需要使用两个循环,此时的时间复杂度就是0(n²)了。 可是题目要求时间复杂度,为

    2023年04月08日
    浏览(18)
  • 使用邻接矩阵实现最小生成树Prim算法 题目编号:1135

    用邻接矩阵存储无向图,实现最小生成树Prim算法,图中边的权值为整型,顶点个数少于10个。 部分代码提示: #include using namespace std; const int MaxSize = 10; const int INF = 32767; class MGraph { public: MGraph(char a[], int n, int e); private: char vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum, arcNum; }

    2024年02月06日
    浏览(27)
  • 【2023】华为OD机试真题全语言-题目0232-最大子矩阵

    实现一个程序 search_matrix(matrix) ,参数 matrix 一是个仅包含 0 或 1 两种数字的矩阵, 程序应返回输入矩阵中包含的最大正方形子矩阵(长和宽相等)的区域面积。 例如:如果 matrix 是 [\\\"1010111111\\\",\\\"0000000111\\\",\\\"1010110111\\\",\\\"0000110001\\\"] 那么它看起来像下面的矩阵: 1010111 111 0000000 111 1010110

    2024年02月08日
    浏览(41)
  • 【PTA题目】7-11 求矩阵的局部极大值 分数 15

    7-11 求矩阵的局部极大值 分数 15 全屏浏览题目 切换布局 作者 徐镜春 单位 浙江大学 给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。 输入格式:

    2024年02月04日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包