codeforces 185A Plant(矩阵快速幂)
来源:互联网 发布:路由器防蹭网屏蔽软件 编辑:程序博客网 时间:2024/05/21 22:36
题意:
一个三角形,在内部分为4个三角形,那么有3个是朝上的,1个是朝下的,且每年分一次,问第n年有多少个朝上的三角形。
思路:
我们用up[i], down[i] 表示第i年朝上的有up[i]个,朝下的有down[i]个,那么我们很容易推出:
up[i] = up[i-1]*3 + down[i]*1;
down[i] = down[i-1]*3 + up[i]*1;
于是,构造矩阵发现,
【1】【3】
【3】【1】这个矩阵的n次方中包含了up[n]和down[n]的信息,只需特判一下n的奇偶性,就可以求出。
总结:
这题看了题后,很快就有了思路,敲出了代码,然后发现测试样例都没过,检查代码发现矩阵乘法部分下标习惯性全部写成了i和j,改好后交WA,发现了没有模,改了继续交,任然WA,后面学长提醒数据范围,改了long long, MLE,最裸的矩阵快速幂居然MLE,想想就不科学。后面发现改的次数多了,有的地方改着改着就忘了,参数的传递类型竟然不匹配,改了继续WA,后面发现结构体mat里的int没改,改了发现任然MLE。学长又提醒数据范围了,终于发现下限没有特判n=0,AC了唯一一题。。本来开场一个小时不到就有思路的题,写到了结束前40分钟。。
代码:
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;typedef long long LL;const LL M = 1000000007;struct mat{LL tu[2][2];mat(){memset(tu, 0, sizeof(tu));}};mat base;mat operator*(const mat &a, const mat &b){mat c;for(int i=0; i<2; i++)for(int j=0; j<2; j++)for(int k=0; k<2; k++)c.tu[i][j] = (c.tu[i][j]+a.tu[i][k]*b.tu[k][j])%M;return c;}mat fastMul(LL k){if(k==1)return base;if(k%2!=0)return base*fastMul(k-1);else{mat tmp = fastMul(k/2);return tmp*tmp;}}void sol(LL n){mat ans = fastMul(n);if(n%2==0) cout<<ans.tu[0][0]<<endl; else cout<<ans.tu[0][1]<<endl;}int main(){LL n;while(cin>>n){ if(n==0) {cout<<1<<endl; continue;} //特判,n可能为0base.tu[0][0] = 1; base.tu[0][1] = 3;base.tu[1][0] = 3; base.tu[1][1] = 1;sol(n);}return 0;}
0 0
- CodeForces - 185A Plant 矩阵快速幂
- codeforces 185A Plant(矩阵快速幂)
- codeforces 185A. Plant 矩阵快速幂
- CodeForces 185A. Plant (矩阵快速幂)
- codeforces 185A Plant(矩阵快速幂)
- codeforces #185 A Plant(矩阵快速幂+递推)
- CodeForces 185A. Plant(矩阵快速幂)
- CodeForces 185A. Plant(矩阵快速幂) 构造
- codeforces plant 矩阵快速幂
- 【快速幂】 CodeForces 185A Plant
- Codeforces 185A Plant 普通快速幂取模
- Codeforces 185A Plant
- codeforces 185A Plant
- CodeForces 185A - Plant
- CodeForces - 185A Plant
- CodeForces 185A Plant
- Codeforces 185 A Plant
- codeforces 185a(矩阵快速幂)
- java之代理设计模式
- 给大家推荐一个LRU实现算法的java 代码
- 2016.8.6
- vs2013和cuda7.5配置使用
- nsis笔记
- codeforces 185A Plant(矩阵快速幂)
- Android图片加载须知
- swift 构造函数
- C++: read SQL server data using System::Data::SqlClient;
- 计算广告:基础知识
- Linux软件安装(二)——RPM与YUM
- 第三章 3.5.2 访问数组元素
- iOS开发笔记(三)
- hibernate.hbm2ddl.auto配置浅析