http://acm.hdu.edu.cn/showproblem.php?pid=2276

矩阵乘法可以解决的一类灯泡开关问题

/*
转移关系为
now left now*
1 0 1
1 1 0
0 1 1
0 0 0 可知F[i] = (f[i] + f[(n+i-2)%n+1]) % 2 得到n*n的关系矩阵是
1 1 0 0 ... 0
0 1 1 0 ... 0
0 0 1 1 ... 0
. . . . ... 0
. . . . ... 0
. . . . ... 0
0 0 0 0 ... 1
1 0 0 0 ... 1
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <map> using namespace std; #define MOD 2 #define Mat 105 //矩阵大小 struct mat{//矩阵结构体,a表示内容,r行c列 矩阵从1开始
int a[Mat][Mat];
int r, c;
mat() {
r = c = ;
memset(a, , sizeof(a));
}
}; void print(mat m) {
//printf("%d\n", m.size);
for(int i = ; i < m.r; i++) {
for(int j = ; j < m.c; j++) printf("%d ", m.a[i][j]);
putchar('\n');
}
} mat mul(mat m1, mat m2, int mod) {
mat ans = mat();
ans.r = m1.r, ans.c = m2.c;
for(int i = ; i <= m1.r; i++)
for(int j = ; j <= m2.r; j++)
if(m1.a[i][j])
for(int k = ; k <= m2.c; k++)
ans.a[i][k] = (ans.a[i][k] + m1.a[i][j] * m2.a[j][k]) % mod;
return ans;
} mat quickmul(mat m, int n, int mod) {
mat ans = mat();
for(int i = ; i <= m.r; i++) ans.a[i][i] = ;
ans.r = m.r, ans.c = m.c;
while(n) {
if(n & ) ans = mul(m, ans, mod);
m = mul(m, m, mod);
n >>= ;
}
return ans;
} /*
初始化ans矩阵
mat ans = mat();
ans.r = R, ans.c = C;
ans = quickmul(ans, n, mod);
*/ char a[]; int main() {
int m;
while(~scanf("%d", &m)) {
scanf("%s", a);
int n = strlen(a);
mat A = mat();
A.r = , A.c = n;
for(int i = ; i <= n; i++)
A.a[][i] = a[i-] - '';
mat G = mat();
G.r = G.c = n;
for(int i = ; i < n; i++) {
G.a[i][i] = G.a[i][i+] = ;
}
G.a[n][] = G.a[n][n] = ;
mat ans = quickmul(G, m, MOD);
ans = mul(A, ans, MOD);
for(int i = ; i <= n; i++)
printf("%d", ans.a[][i]);
putchar('\n');
}
return ;
}

HDU 2276的更多相关文章

  1. hdu 2276 Kiki & Little Kiki 2

    点击打开hdu 2276 思路: 矩阵快速幂 分析: 1 题目给定一个01字符串然后进行m次的变换,变换的规则是:如果当前位置i的左边是1(题目说了是个圆,下标为0的左边是n-1),那么i就要改变状态 ...

  2. HDU 2276 矩阵快速幂

    Kiki & Little Kiki 2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  3. HDU 2276 Kiki & Little Kiki 2 矩阵构造

    Kiki & Little Kiki 2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  4. hdu 2276 Kiki & Little Kiki 2 矩阵快速幂

    题目链接 n个灯围成一圈, 1左边是n. 有两种状态, 1是亮, 0是不亮. 如果一个灯, 它左边的灯是亮的, 那么下一时刻这个灯就要改变状态, 1变为0, 0变为1. 给出初始状态和时间t, 问t时 ...

  5. HDU - 2276 Kiki &amp; Little Kiki 2

    Description There are n lights in a circle numbered from 1 to n. The left of light 1 is light n, and ...

  6. NYOJ 300 &amp;&amp; hdu 2276 Kiki &amp; Little Kiki 2 (矩阵高速功率)

    pid=300">Kiki & Little Kiki 2 时间限制:5000 ms  |  内存限制:65535 KB 难度:4 描写叙述 There are n light ...

  7. HDU 2276 Kiki & Little Kiki 2(矩阵位运算)

    Kiki & Little Kiki 2 转载自:点这里 [题目链接]Kiki & Little Kiki 2 [题目类型]矩阵位运算 &题意: 一排灯,开关状态已知,每过一秒 ...

  8. HDU - 2276 位运算矩阵快速幂

    挺有意思的一道题 要会运用一些常见的位运算操作进行优化 题目的本质就是要求下面的式子 \(dp[i][j+1]=(dp[i-1][j]+dp[i][j]) \mod 2\) (第\(i\)个字符在\( ...

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

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

随机推荐

  1. Hadoop笔记HDFS(1)

    环境:Hadoop2.7.3 1.Benchmarking HDFS 1.1测试集群的写入 运行基准测试是检测HDFS集群是否正确安装以及表现是否符合预期的好方法.DFSIO是Hadoop自带的一个基 ...

  2. [问题2014A09] 解答

    [问题2014A09]  解答 通过简单的计算可得 \[(AB)^2=9AB,\cdots\cdots(1)\] 将 (1) 式的右边移到左边, 并将 \(A,B\) 分别提出可得 \[A(BA-9I ...

  3. [问题2014S01] 解答

    [问题2014S01] 解答  因为 \(f(x_1,\cdots,x_n)\) 为 \(2\) 次 \(n\) 元对称多项式, 故 \[f(x_1,\cdots,x_n)=a\sum_{i=1}^n ...

  4. hdu4352 XHXJ's LIS

    链接 这个题最不好想到的是状态的保存,也没有几亿的数组让你开,怎么保存前面出现了哪些数字. 题意让你求最长上升子序列的长度为k的数字的数目,可以是不连续的,可以保留一个状态栈,栈顶部依次更新,再保证长 ...

  5. centos 安装redis自启动要点

    1.redis.conf a.daemonize yes b.pidfile /var/run/xxx.pid 2./etc/init.d/redis //加了下面三个注释部分,才支持设置开机自启动 ...

  6. spring data实现自定义的repository实现类,实现跟jpa联通

    如果你不想暴露那么多的方法,可以自己订制自己的Repository,还可以在自己的Repository里面添加自己使用的公共方法 当然更灵活的是自己写一个实现类,来实现自己需要的方法 1:写一个与接口 ...

  7. [java基础]循环结构2

    [java基础]循环结构2 写了几个循环结构练习~记录一下~~ 1:99乘法表 /** 文件路径:G:\JavaByHands\循环语句\ 文件名称:GameForFor.java 编写时间:2016 ...

  8. block(闭包)

    使用方式 1定义为类的属性 最后用来发布通知,执行block即可 甚至同时发送数据参数,给方法调用者,这样返回数据比返回值形式,更好, 因为这样传参,不是同步的,而是异步响应式的,更加灵活安全. 2定 ...

  9. zabbix3.0.4 部署之五 (LNMP > nginx1.9.9)

    1 wget http://nginx.org/download/nginx-1.9.9.tar.gz cd /opt/pcre-8.35 autoreconf -ivf Installing sha ...

  10. Django1.9开发博客(8)- 继续完善

    到现在为止我们已经完成的差不多了,并且基本的东西都已经学到了,是时候用起来了. 我们的博客还有很多功能需要完善,下面抛砖引玉新增几个功能,还有其他功能等你自己去发现和实现. 草稿箱 之前我们新建文章的 ...