设为首页 加入收藏

TOP

UVA - 1386 Cellular Automaton
2015-07-20 17:46:30 来源: 作者: 【 】 浏览:2
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-24 22:20:09)
·纯C语言结构体成员变 (2025-12-24 22:20:06)
·C语言中,指针函数和 (2025-12-24 22:20:03)
·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)