设为首页 加入收藏

TOP

UVA - 1386 Cellular Automaton
2015-07-20 17:46:30 来源: 作者: 【 】 浏览:3
Tags:UVA 1386 Cellular Automaton


题目:点击打开链接

题意:一个细胞自动机包含n个格子,每个格子的值都会变成它距离不超过d的所有格子的值,求最后的结果

思路:这个是循环矩阵,可以用O(n^2)的时间过掉

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; typedef long long ll; const int maxn = 505; int n, m, d, k; ll ans[maxn], matrix[maxn]; ll c[maxn+5]; void mul(ll a[], ll b[]) { memset(c, 0, sizeof(c)); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) c[i] += a[j] * b[(i-j+n) % n]; for (int i = 0; i < n; i++) b[i] = c[i] % m; } int main() { while (scanf("%d%d%d%d", &n, &m, &d, &k) != EOF) { memset(ans, 0, sizeof(ans)); memset(matrix, 0, sizeof(matrix)); for (int i = 0; i < n; i++) cin>>ans[i]; matrix[0] = 1; for (int i = 1; i <= d; i++) matrix[i] = matrix[n - i] = 1; while (k) { if (k & 1) mul(matrix, ans); mul(matrix, matrix); k >>= 1; } for (int i = 0; i < n - 1; i++) printf("%lld ", ans[i]); printf("%lld\n", ans[n-1]); } return 0; }
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇OpenStack 网络总结之:理解GRE隧.. 下一篇uva 11107 - Life Forms(后缀数组)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)
·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)