HDU 2276
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的更多相关文章
- hdu 2276 Kiki & Little Kiki 2
点击打开hdu 2276 思路: 矩阵快速幂 分析: 1 题目给定一个01字符串然后进行m次的变换,变换的规则是:如果当前位置i的左边是1(题目说了是个圆,下标为0的左边是n-1),那么i就要改变状态 ...
- HDU 2276 矩阵快速幂
Kiki & Little Kiki 2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- HDU 2276 Kiki & Little Kiki 2 矩阵构造
Kiki & Little Kiki 2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- hdu 2276 Kiki & Little Kiki 2 矩阵快速幂
题目链接 n个灯围成一圈, 1左边是n. 有两种状态, 1是亮, 0是不亮. 如果一个灯, 它左边的灯是亮的, 那么下一时刻这个灯就要改变状态, 1变为0, 0变为1. 给出初始状态和时间t, 问t时 ...
- HDU - 2276 Kiki & 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 ...
- NYOJ 300 && hdu 2276 Kiki & Little Kiki 2 (矩阵高速功率)
pid=300">Kiki & Little Kiki 2 时间限制:5000 ms | 内存限制:65535 KB 难度:4 描写叙述 There are n light ...
- HDU 2276 Kiki & Little Kiki 2(矩阵位运算)
Kiki & Little Kiki 2 转载自:点这里 [题目链接]Kiki & Little Kiki 2 [题目类型]矩阵位运算 &题意: 一排灯,开关状态已知,每过一秒 ...
- HDU - 2276 位运算矩阵快速幂
挺有意思的一道题 要会运用一些常见的位运算操作进行优化 题目的本质就是要求下面的式子 \(dp[i][j+1]=(dp[i-1][j]+dp[i][j]) \mod 2\) (第\(i\)个字符在\( ...
- HDU 2276 Kiki & Little Kiki 2( 矩阵快速幂 + 循环同构矩阵 )
蒟蒻的我还需深入学习 链接:传送门 题意:给出一个长度为 n,n 不超过100的 01 串 s ,每当一个数字左侧为 1 时( 0的左侧是 n-1 ),这个数字就会发生改变,整个串改变一次需要 1s ...
随机推荐
- Duilib 实现窗口点击关闭确认退出提示
此功能是记住用户的操作,在用户点击关闭时是真退出程序还是最小化到托盘,我们常见的PC客户端都有此功能,例如:IMO客户端.网易云音乐 我自己的项目中也要实现此功能,在此总结一下,最终效果: .h文件 ...
- jsoup: Java HTML Parser (类似jquery)
jsoup is a Java library for working with real-world HTML. It provides a very convenient API for extr ...
- Response.End()在Webform和ASP.NET MVC下的表现差异
前几天在博问中看到一个问题--Response.End()后,是否停止执行?MVC与WebForm不一致.看到LZ的描述后,虽然奇怪于为何用Response.End()而不用return方式去控制流程 ...
- js模板引擎
js模板引擎包括如下: template 官方参考:http://aui.github.io/artTemplate BaiduTemplate 官方参考:http://baidufe.github. ...
- winform自定义按钮菜单
//填写其他报表按钮 private void btnWriteRep_Click(object sender, EventArgs e) { try ...
- Postman 安装及使用入门教程
安装 本文只是基于 Chrome 浏览器的扩展插件来进行的安装,并非单独应用程序. 首先,你要台电脑,其次,安装有 Chrome 浏览器,那你接着往下看吧. 1. 官网安装(别看) 打开官网,http ...
- php_match/preg_match_all 默认有字符串长度限制
php_match/preg_match_all 默认有字符串长度限制:52500(或许你的服务器环境是更长,或者更短),当字符串长度大于52500,只能匹配到52500数据,超出的部分会被系统自己截 ...
- 【更新】【封装必备】封装辅助 - 清理&优化工具 For Win7(IT天空会员专版)
https://www.itsk.com/thread-353560-1-4.html nqawen 发表于 2015-7-9 17:26:37 本帖最后由 Amz 于 2015-11-25 10 ...
- Unity NGUI 2D场景添加按钮
比如说先添加一个sprite 在sprite加上NGUI的 UI Button 然后重点来了 加上Box Collider 2D(重点:2D 千万不要加 Box Collider) 将Box Col ...
- git: No refs in common and none specified; doing no
用gitolite新建项目,clone后首次push,可能会出现: $ git push No refs in common and none specified; doing nothing ...