51nod1122 机器人走方格 V4
矩阵快速幂求出每个点走n步后到某个点的方案数。然后暴力枚举即可
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
#define ll long long
int read(){
int x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
return x;
}
const int nmax=5;
const int mod=1e9+7;
struct node{
ll a[nmax][nmax];
node(){
clr(a,0);
}
node operator*(const node&o)const{
node ans;
rep(i,1,4) rep(j,1,4) {
rep(k,1,4) ans.a[i][j]+=a[i][k]*o.a[k][j]%mod;
ans.a[i][j]%=mod;
}
return ans;
}
};
node a,b;
int main(){
int n=read();
rep(i,1,4) rep(j,1,4) if(i!=j) b.a[i][j]=1;
rep(i,1,4) a.a[i][i]=1;
while(n){
if(n&1) a=a*b;
b=b*b;n>>=1;
}
ll ans=0;
rep(i,1,4) rep(j,1,4) if(i!=j) rep(k,1,4) if(k!=j&&k!=i) rep(t,1,4) if(t!=i&&t!=j&&t!=k)
ans=(ans+a.a[1][i]*a.a[2][j]%mod*a.a[3][k]%mod*a.a[4][t]%mod)%mod;
printf("%lld\n",ans);
return 0;
}
输入1个数N(0 <= N <= 10^9)
输出走法的数量 Mod 10^9 + 7
1
9
51nod1122 机器人走方格 V4的更多相关文章
- 1122 机器人走方格 V4
1122 机器人走方格 V4 基准时间限制:1 秒 空间限制:131072 KB 四个机器人a b c d,在2 * 2的方格里,一开始四个机器人分别站在4个格子上,每一步机器人可以往临近的一个格子 ...
- 51nod_1122:机器人走方格 V4 (矩阵快速幂)
题目链接 昨天上随机信号分析讲马氏链的时候突然想到这题的解法,今天写一下 定义矩阵A,Ans=A^n,令A[i][j]表示,经过1次变换后,第i个位置上的机器人位于第j个位置的情况数,则Ans[i][ ...
- 51nod 1122 机器人走方格 V4 【矩阵快速幂】
首先建立矩阵,给每个格子编号,然后在4*4的格子中把能一步走到的格子置为1,然后乘n次即可,这里要用到矩阵快速幂 #include<iostream> #include<cstdio ...
- 51nod 1122:机器人走方格 V4 (矩阵快速幂)
题目链接 昨天上随机信号分析讲马氏链的时候突然想到这题的解法,今天写一下 定义矩阵A,Ans=A^n,令A[i][j]表示,经过1次变换后,第i个位置上的机器人位于第j个位置的情况数,则Ans[i][ ...
- 机器人走方格 V3
1120 . 机器人走方格 V3 基准时间限制:1 秒 空间限制:65536 KB 分值: 160 N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在 ...
- 51nod1120 机器人走方格 V3
跟括号序列是一样的,将向右走看成是左括号向左走看成是右括号就可以了.那么就是卡特兰数了.然后由于n和m太大所以用了lucas定理 //跟括号序列是一样的,将向右走看成是左括号向左走看成是右括号就可以了 ...
- 51nod1119 机器人走方格 V2
终于学到了求组合数的正确姿势 //C(n+m-2,m-1) #include<cstdio> #include<cstring> #include<cctype> ...
- 51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式 ...
- 1119 机器人走方格 V2(组合)
1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于 ...
随机推荐
- java基础类:Object类和Math类
1.2.3.4.5.6.7.7.
- 当你碰到一个网络中有多个PXE Server 肿么办?
今天在用PXE 安装Openstack Compute节点时,郁闷得发现同一网段中还有一个PXE Server,而我的Compute 启动起来总会先找到它,但那个设置不受我控制,子网也不归我管,那个s ...
- 如何在 Swift 语言下使用 iOS Charts API 制作漂亮图表?
[编者按]本文作者 Joyce Echessa 是渥合数位服务创办人,毕业于台湾大学,近年来专注于协助客户进行 App 软体以及网站开发.文中作者通过示例介绍用 ios-charts 库创建简易美观的 ...
- POJ 2127
#include <iostream> #define MAXN 501 using namespace std; int a[MAXN],b[MAXN],ans[MAXN]; int G ...
- UVA 10780 Again Prime? No Time. 分解质因子
The problem statement is very easy. Given a number n you have to determine the largest power of m,no ...
- angularJS之$apply()方法
这几天,根据buddy指定的任务,要分享一点angular JS的东西.对于一个在前端属于纯新手的我来说,Javascript都还是一知半解,要想直接上手angular JS,遇到的阻力还真是不少.不 ...
- Java7编程高手进阶读书笔记—集合框架
定义:Java集合框架API是用来表示和操作集合的统一框架,它包含接口.实现类.以及帮助程序员完成一些编程的算法 作用: ●编程更加省力,提高城程序速度和代码质量 ● 非关联的API提高互操作性 ● ...
- VBA高效删除不连续多行
最近在搞VBA,在感叹Excel功能强大的同时,对于新接触的一门编程语言也很烦恼.很多基础的语法都要靠网上搜索.现总结一些学习到的心得. VBA高效删除不连续多行 在一个拥有几万条数据的Excel中, ...
- Android核心分析之十五Android输入系统之输入路径详解
Android用户事件输入路径 1 输入路径的一般原理 按键,鼠标消息从收集到最终将发送到焦点窗口,要经历怎样的路径,是Android GWES设计方案中需要详细考虑的问题.按键,鼠标等用户消息 ...
- linux rpm命令
1.rpm 是红帽(RedHat)软件包管理工具,实现类似于 Windows 中的添加/删除程序功能. 2.rpm -ivh 软件包名 安装软件包并显示安装进度.这个是用得最多的了. 3. rpm - ...