CodeForces 185A. Plant (矩阵快速幂)
CodeForces 185A. Plant (矩阵快速幂)
题意分析
求解N年后,向上的三角形和向下的三角形的个数分别是多少。如图所示:
N=0时只有一个向上的三角形,N=1时有3个向上的三角形,1个向下的三角形,N=2,有10个向上的三角形和6个向下的三角形。
根据递推关系,设an为第N年向上的三角形个数,bn为第N年向下的三角形个数、初始条件为 a0 = 1, b0 = 0;
递推关系式:
an = 3an-1 + bn-1
bn = 3bn-1 + an-1
可以构造出一下矩阵
然后用矩阵快速幂即可。
代码总览
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <sstream>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
#define INF 0x3f3f3f3f
#define nmax 200
#define MEM(x) memset(x,0,sizeof(x))
using namespace std;
const int Dmax = 11;
int N = 2;
long long MOD;
typedef struct{
long long matrix[Dmax][Dmax];
void init()
{
memset(matrix,0,sizeof(matrix));
for(int i = 0; i<Dmax;++i) matrix[i][i] = 1;
}
}MAT;
MAT ADD(MAT a, MAT b)
{
for(int i = 0; i<N;++i){
for(int j = 0;j<N;++j){
a.matrix[i][j] +=b.matrix[i][j];
a.matrix[i][j] %= MOD;
}
}
return a;
}
MAT MUL(MAT a, MAT b)
{
MAT ans;
for(int i = 0; i<N;++i){
for(int j = 0; j<N;++j){
ans.matrix[i][j] = 0;
for(int k = 0; k<N;++k){
ans.matrix[i][j] += ( (a.matrix[i][k]) * (b.matrix[k][j]) ) % MOD;
}
ans.matrix[i][j] %= MOD;
}
}
return ans;
}
MAT POW(MAT a, long long t)
{
MAT ans; ans.init();
while(t){
if(t&1) ans = MUL(ans,a);
t>>=1;
a = MUL(a,a);
}
return ans;
}
void OUT(MAT a)
{
for(int i = 0; i<N;++i){
for(int j = 0; j<N;++j){
printf("%5I64d",a.matrix[i][j]);
}
printf("\n");
}
}
void IN(MAT & a,MAT & ini)
{
memset(a.matrix,0,sizeof(a.matrix));
memset(ini.matrix,0,sizeof(ini.matrix));
ini.matrix[0][0] = 1;
ini.matrix[1][0] = 0;
a.matrix[0][0] = a.matrix[1][1] = 3;
a.matrix[0][1] = a.matrix[1][0] = 1;
}
void CAL(MAT a)
{
printf("%I64d\n",a.matrix[0][0] % MOD);
}
int main()
{
//freopen("in.txt","r",stdin);
long long n;MOD = 1000000007;
while(scanf("%I64d",&n) != EOF){
MAT temp,ini;
IN(temp,ini);
temp = POW(temp,n);
temp = MUL(temp,ini);
CAL(temp);
}
return 0;
}
CodeForces 185A. Plant (矩阵快速幂)的更多相关文章
- Codeforces - 185A 简单矩阵快速幂
题意:求第n个三角形内部的上三角形个数 对每个三角形分别维护上下三角形个数,记为\(dp[1][i],dp[2][i]\) 规律很明显是 \(dp[1][i+1]=3*dp[1][i]+dp[2][i ...
- codeforces 691E Xor-sequences 矩阵快速幂
思路:刚开始 n个元素,a[i][j]代表以i开头,j结尾的二元组符合条件的有多少 这是等于长度为2的数量 长度为3的数量为a*a,所以长度为n的数量是a^(k-1) 然后就是矩阵快速幂,然而我并不能 ...
- CodeForces 450B (矩阵快速幂模板题+负数取模)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51919 题目大意:斐波那契数列推导.给定前f1,f2,推出指定第N ...
- Plant 矩阵快速幂,,,,有点忘了
题目链接:https://codeforces.com/contest/185/problem/A 题目大意就是求n次以后 方向朝上的三角形的个数 以前写过这个题,但是忘了怎么做的了,,,又退了一遍 ...
- Codeforces 185A Plant( 递推关系 + 矩阵快速幂 )
链接:传送门 题意:输出第 n 年向上小三角形的个数 % 10^9 + 7 思路: 设 Fn 为第 n 年向上小三角形的个数,经过分析可以得到 Fn = 3 * Fn-1 + ( 4^(n-1) - ...
- Educational Codeforces Round 13 D. Iterated Linear Function (矩阵快速幂)
题目链接:http://codeforces.com/problemset/problem/678/D 简单的矩阵快速幂模版题 矩阵是这样的: #include <bits/stdc++.h&g ...
- Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences (矩阵快速幂)
题目链接:http://codeforces.com/problemset/problem/450/B 题意很好懂,矩阵快速幂模版题. /* | 1, -1 | | fn | | 1, 0 | | f ...
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
- Codeforces Round #536 (Div. 2) F 矩阵快速幂 + bsgs(新坑) + exgcd(新坑) + 欧拉降幂
https://codeforces.com/contest/1106/problem/F 题意 数列公式为\(f_i=(f^{b_1}_{i-1}*f^{b_2}_{i-2}*...*f^{b_k} ...
随机推荐
- Bing wallpaper api
list: http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-cn idx:-1为明天,1为 ...
- MySQL日期、字符串、时间戳互转
平时比较常用的时间.字符串.时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去搜索一下用法:本文将作为一个笔记,整理一下三者之间的 转换(即:date转字符串.date转时间戳.字符串转dat ...
- python3 BeautifulSoup模块使用
BeautifulSoup就是Python的一个HTML或XML的解析库,可以用它来方便地从网页中提取数据.官方解释如下: Beautiful Soup提供一些简单的.Python式的函数来处理导航. ...
- CSS随笔3
1. CSS部分简洁使用 * background-radious:使得边框角“圆化”. * background:pink url(“图片路径”) no-repeat: * border 可以有 ...
- 90 [LeetCode] Subsets2
Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...
- 概要梳理kafka知识点
主要是梳理一下kafka学习中的一些注意点,按照消息的流动方向进行梳理.详细的kafka介绍推荐看骑着龙的羊的系列博客,具体的某一块的知识点,可以参考我给出的一些参考文章. 1. kafka在系统中的 ...
- 一个改变this指向bind的函数,vue源代码
function bind(fn, ctx) { return function (a) { var l = arguments.length; return l ? l > 1 ? fn.ap ...
- 2. socket结构体——表示socket地址
一.两种通用socket结构体 1. sockaddr struct sockaddr { sa_family_t sa_family; // 地址族 char sa_data[14]; // 存放s ...
- ChromeSwitchySharp代理设置步骤
步骤: 1.新增情景模式配置如下: 2.设置切换规则 3.先“直接连接”进行登录:然后切换到“自动切换模式”访问对应url
- 第八次作业——项目UML设计
分工及贡献分评定 成员 参与 贡献比例 朱跃安(031602348) 类图 13% 后敬甲(031602409) 实体关系图+博客整理 14.5% 林志华(031602128) 用例图+活动图 14. ...