hdu 2276(矩阵快速幂)
来源:互联网 发布:mac是什么档次化妆品 编辑:程序博客网 时间:2024/06/09 19:56
题意:给出n个灯的状态’1’表示开,’0’表示关,现在给出一个规则,如果这个灯的左边的灯是开的(第一个灯的左边的灯是最后一个),那么就可以改变自己的状态,比如之前是1后来变0,之前是0后来变1,问m轮后n个灯的状态。
题解:第一个矩阵是当前灯的状态,第二个矩阵的每列就把当前行和前一行标记1,其他标记0,当前灯的状态其实就是当前灯状态和前一个灯状态的异或操作,在矩阵乘法时相加模2就是结果。
#include <stdio.h>#include <string.h>const int N = 105;struct Mat { int g[N][N];}ori, res;char str[N];int n, m;Mat multiply(Mat x, Mat y) { Mat temp; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { temp.g[i][j] = 0; for (int k = 0; k < n; k++) temp.g[i][j] = (temp.g[i][j] + x.g[i][k] * y.g[k][j]) % 2; } return temp;}void calc(int m) { while (m) { if (m & 1) ori = multiply(ori, res); m >>= 1; res = multiply(res, res); }}int main() { while (scanf("%d", &m) == 1) { memset(res.g, 0, sizeof(res.g)); memset(ori.g, 0, sizeof(ori.g)); scanf("%s", str); n = strlen(str); for (int i = 0; i < n; i++) ori.g[0][i] = str[i] - '0'; for (int i = 0; i < n; i++) res.g[i][i] = res.g[i][(i + 1) % n] = 1; calc(m); for (int i = 0; i < n; i++) printf("%d", ori.g[0][i]); printf("\n"); } return 0;}
0 0
- hdu 2276(矩阵快速幂)
- hdu 2276(矩阵快速幂)
- hdu 2276(矩阵快速幂)
- hdu 2276 矩阵快速幂&&循环矩阵优化
- 【矩阵快速幂】hdu 1575
- 【矩阵快速幂】hdu 1757
- hdu 2604 矩阵快速幂
- hdu-1575矩阵快速幂
- hdu 1575 矩阵快速幂
- hdu 1575(矩阵快速幂)
- hdu 3306 矩阵快速幂
- hdu 1757 矩阵快速幂
- hdu 1575 矩阵快速幂
- hdu 2855 矩阵快速幂
- hdu 3117 矩阵快速幂
- hdu 1005 矩阵快速幂
- hdu 4965 矩阵快速幂
- hdu 2793 矩阵快速幂
- DialogFragment
- JAVA实战2——近似画圆
- Shell 基本命令
- nmap端口探测原理初探
- nodejs获取参数
- hdu 2276(矩阵快速幂)
- gridx的使用
- 外观模式
- GUET-ACM-#1110-A+B增强版
- JAVA第一次作业 目标2
- python函数及函数式编程
- 项目从tomcat向weblogic迁移遇到的一些问题
- 使用 CCC(Carbon Copy Cloner)备份、还原OS X 10.10 Yosemite(优胜美地)系统
- 拷贝