51Nod-1122-机器人走方格 V4
来源:互联网 发布:网络连接图片 编辑:程序博客网 时间:2024/06/07 21:10
ACM模版
描述
题解
最开始看这个题,半天没有看懂样例,后来发现原来这里的走一步是指四个机器人同时走一步,于是乎,这个可以用矩阵快速幂来解决,毕竟这种套路的题核心就是构造可达矩阵……至于可达矩阵的构造方案,有很多种,但是都是相似的,可以看看讨论区中大佬的构造方案,剩下的就么有啥可说的了。
这个忘了说一点,最开始提交只过了两组,其他都
代码
#include <iostream>#include <cstring>/* * 矩阵快速幂 n*n矩阵的x次幂 */#define MAXN 5#define MOD 1000000007#define LL long longusing namespace std;int n, N;struct mat{ LL m[MAXN][MAXN];} unit; // 单元矩阵// 矩阵乘法mat operator * (mat a, mat &b){ mat ret; memset(ret.m, 0, sizeof(ret.m)); for (int k = 0; k < n; k++) { for (int i = 0; i < n; i++) { if (a.m[i][k]) { for (int j = 0; j < n; j++) { ret.m[i][j] = (ret.m[i][j] + a.m[i][k] * b.m[k][j] % MOD) % MOD; } } } } return ret;}void init_unit(){ n = 4; for (int i = 0; i < MAXN; i++) { unit.m[i][i] = 1; }}mat pow_mat(mat a, LL n){ mat ret = unit; while (n) { if (n & 1) { ret = ret * a; } n >>= 1; a = a * a; } return ret;}int main(){ init_unit(); cin >> N; if (N == 0) { puts("1"); return 0; } mat a; a.m[0][0] = 1, a.m[0][1] = 1, a.m[0][2] = 1, a.m[0][3] = 0; a.m[1][0] = 1, a.m[1][1] = 1, a.m[1][2] = 0, a.m[1][3] = 1; a.m[2][0] = 1, a.m[2][1] = 0, a.m[2][2] = 1, a.m[2][3] = 1; a.m[3][0] = 0, a.m[3][1] = 1, a.m[3][2] = 1, a.m[3][3] = 1; a = pow_mat(a, N); LL ans = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i == j) { continue; } for (int k = 0; k < n; k++) { if (k == i || k == j) { continue; } for (int l = 0; l < n; l++) { if (l == i || l == j || l == k) { continue; } ans += ((a.m[0][i] * a.m[1][j] % MOD) * (a.m[2][k] * a.m[3][l] % MOD)) % MOD; ans %= MOD; } } } } printf("%lld\n", ans); return 0;}
阅读全文
0 0
- 51Nod-1122-机器人走方格 V4
- 51nod 1122 机器人走方格 V4(矩阵快速幂)
- 51nod 1122 机器人走方格 V4[矩阵快速幂]
- 1122 机器人走方格 V4
- 51nod 1122 机器人走方格 V4【组合数学】【矩阵乘法】
- 51 Nod 机器人走方格
- 机器人走方格 51Nod
- 【51Nod1122】机器人走方格 V4
- 51nod 1118 机器人走方格
- 51nod 1118 机器人走方格
- 51nod 1119 机器人走方格 V2
- 51nod 1119 机器人走方格
- 51nod 1120 机器人走方格v3
- 51nod-【1119 机器人走方格 V2】
- 51nod-【1118 机器人走方格】
- 51nod-1119 机器人走方格 V2
- 51nod 1118 机器人走方格
- 51nod 1119 机器人走方格 V2
- 深度 | 生成对抗网络初学入门:一文读懂GAN的基本原理(附资源)
- vue去掉严格开发,即去掉vue-cli安装时的eslint
- 插入算法
- java学习初探十三之集合Collection常用方法
- Servlet处理一个上传的文件
- 51Nod-1122-机器人走方格 V4
- 电商学习笔记
- jsp中js和java执行顺序
- 继承AppCompatActivity的Activity无法隐藏标题栏
- android surfaceflinger(1)-启动初始化1
- 百度大牛讲机制设计和计算广告学
- 如何为treewidgetitem添加右键菜单
- 数组
- poj1509 Glass Beads 找最小的字母边转移