将这n个格子看做一个向量,每次操作都是一次线性组合,即vn+1 = Avn,所求答案为Akv0

A是一个n*n的矩阵,比如当n=5,d=1的时候:

不难发现,A是个循环矩阵,也就是将某一行所有元素统一向右移动一位便得到下一行。

而且循环矩阵相乘仍然是循环矩阵,所以只要求出Ak的第一行就行了。

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = + ;
typedef long long Vector[maxn]; int n, m, d, k; inline int value(Vector A, int i, int j)
{//循环矩阵A(i, j)的值
return A[(((j-i)%n)+n)%n];
} void matrix_mul(Vector A, Vector B, Vector res)
{
Vector C;
memset(C, , sizeof(C));
for(int j = ; j < n; j++)
for(int k = ; k < n; k++)
C[j] = (C[j] + A[k] * value(B, k, j)) % m;
memcpy(res, C, sizeof(C));
} void matrix_pow(Vector A, int n, Vector res)
{
Vector a, r;
memcpy(a, A, sizeof(a));
memset(r, , sizeof(r));
r[] = ;
while(n)
{
if(n&) matrix_mul(r, a, r);
n >>= ;
matrix_mul(a, a, a);
}
memcpy(res, r, sizeof(r));
} void solve(Vector A, Vector v, Vector res)
{
Vector B;
memset(B, , sizeof(B));
for(int i = ; i < n; i++)
for(int j = ; j < n; j++)
B[i] = (B[i] + value(A, i, j) * v[j]) % m;
memcpy(res, B, sizeof(B));
} int main()
{
//freopen("in.txt", "r", stdin); while(cin >> n >> m >> d >> k)
{
Vector A, v;
for(int i = ; i < n; i++) cin >> v[i];
memset(A, , sizeof(A));
for(int p = -d; p <= d; p++)
{
int x = ((p%n)+n)%n;
A[x] = ;
}
/*for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
printf("%d ", value(A, i, j));
printf("\n");
}*/
matrix_pow(A, k, A);
solve(A, v, v);
for(int i = ; i < n; i++)
{
if(i) printf(" ");
cout << v[i];
}
printf("\n");
} return ;
}

代码君

LA 3704 (矩阵快速幂 循环矩阵) Cellular Automaton的更多相关文章

  1. Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)

    Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵 ...

  2. HDU 2276 Kiki & Little Kiki 2( 矩阵快速幂 + 循环同构矩阵 )

    蒟蒻的我还需深入学习 链接:传送门 题意:给出一个长度为 n,n 不超过100的 01 串 s ,每当一个数字左侧为 1 时( 0的左侧是 n-1 ),这个数字就会发生改变,整个串改变一次需要 1s ...

  3. 51nod 1113 矩阵快速幂( 矩阵快速幂经典模板 )

    1113 矩阵快速幂 链接:传送门 思路:经典矩阵快速幂,模板题,经典矩阵快速幂模板. /******************************************************* ...

  4. HDU 1588 矩阵快速幂 嵌套矩阵

    这个题目搞了我差不多一个下午,之前自己推出一个公式,即 f[n+k]=k*f[n]+f[n-1]结果发现根本不能用,无法降低复杂度. 后来又个博客的做法相当叼,就按他的做法来了 即 最终求得是 S(n ...

  5. 题解——洛谷P3390 【模板】矩阵快速幂(矩阵乘法)

    模板题 留个档 #include <cstdio> #include <algorithm> #include <cstring> #define int long ...

  6. hdu6470 矩阵快速幂+构造矩阵

    http://acm.hdu.edu.cn/showproblem.php?pid=6470 题意 \(f[n]=2f[n-2]+f[n-1]+n^3,n \leq 10^{18}\),求f[n] 题 ...

  7. bzoj 2326: [HNOI2011]数学作业【dp+矩阵快速幂】

    矩阵乘法一般不满足交换律!!所以快速幂里需要注意乘的顺序!! 其实不难,设f[i]为i的答案,那么f[i]=(f[i-1]w[i]+i)%mod,w[i]是1e(i的位数),这个很容易写成矩阵的形式, ...

  8. poj4474 Scout YYF I(概率dp+矩阵快速幂)

    Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4100   Accepted: 1051 Descr ...

  9. hdu3483之二项式展开+矩阵快速幂

    A Very Simple Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot ...

随机推荐

  1. windows 2008 怎么对外开放端口

    服务器已经运行了程序,但是android客户端连接不上, 网上提示说用: start /min telnet 192.168.3.42 2121 查看,但是我的提示tenlet找不到命令,估计是端口的 ...

  2. iOS Core data多线程并发访问的问题

    大家都知道Core data本身并不是一个并发安全的架构:不过针对多线程访问带来的问题,Apple给出了很多指导:同时很多第三方的开发者也贡献了很多解决方法.不过最近碰到的一个问题很奇怪,觉得有一定的 ...

  3. 2729:[HNOI2012]排队 - BZOJ

    题目描述 Description某中学有n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人 ...

  4. java 把URL中的中文转换成utf-8编码

    private static final String QUERY = "餐饮"; String sr = URLEncoder.encode(QUERY); System.out ...

  5. POJ 3164 Command Network 最小树形图

    题目链接: 题目 Command Network Time Limit: 1000MS Memory Limit: 131072K 问题描述 After a long lasting war on w ...

  6. Codeforces Round #358 (Div. 2) D. Alyona and Strings 字符串dp

    题目链接: 题目 D. Alyona and Strings time limit per test2 seconds memory limit per test256 megabytes input ...

  7. 剑指offer--面试题7

    //两个栈实现一个队列 #include<stack> //STL #include<iostream> using namespace std; template<cl ...

  8. [shell编程]初识sed和gawk

    一.sed编辑器       shell脚本最常见的用途就是处理文本文件,sed和gawk能够极大的简化需要进行的数据处理任务.sed编辑器是流编辑器,跟普通交互式文本编辑器(如vim)不同.流编辑器 ...

  9. java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter

    FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFi ...

  10. Opc

    http://www.tuicool.com/articles/nymUz2 http://blog.chinaunix.net/uid-20692368-id-3434001.html http:/ ...