HDU2276 - Kiki & Little Kiki 2(矩阵高速幂)
题意:有n盏灯。编号从1到n。他们绕成一圈,也就是说。1号灯的左边是n号灯。假设在第t秒的时候,某盏灯左边的灯是亮着的,那么就在第t+1秒的时候改变这盏灯的状态。输入m和初始灯的状态。输出m秒后,全部灯的状态。
思路:事实上每盏灯的状态之和前一盏和自己有关。所以能够得到一个关系矩阵。如果有6盏灯,因此能够得到关系矩阵例如以下:
(1, 0, 0, 0, 0, 1)
(1, 1, 0, 0, 0, 0)
(0, 1, 1, 0, 0, 0)
(0, 0, 1, 1, 0, 0)
(0, 0, 0, 1, 1, 0)
(0, 0, 0, 0, 1, 1)
这种话就能够以此类推。得到n盏灯时的关系矩阵。然后使用矩阵高速幂进行运算。
PS:在这里,自己刚開始高速幂是用递归的。可是暴栈了。
。。后来改成非递归才过的。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm> using namespace std; const int MAXN = 105; struct mat{
int s[MAXN][MAXN];
int l;
mat(int len) {
memset(s, 0, sizeof(s));
l = len;
}
mat operator * (const mat& c) {
mat ans(l);
memset(ans.s, 0, sizeof(ans.s));
for (int i = 0; i < l; i++)
for (int j = 0; j < l; j++) {
for (int k = 0; k < l; k++)
ans.s[i][j] = (ans.s[i][j] + s[i][k] * c.s[k][j]);
ans.s[i][j] = ans.s[i][j] % 2;
}
return ans;
}
}; char str[MAXN];
int t; mat pow_mod(mat c, int k) {
/*if (k == 1)
return c;
mat a = pow_mod(c, k / 2);
mat ans = a * a;
if (k % 2)
ans = ans * c;
return ans;*/
mat ans = c;
k--;
while (k) {
if (k & 1)
ans = ans * c;
k >>= 1;
c = c * c;
}
return ans;
} int main() {
while (scanf("%d", &t) != EOF) {
scanf("%s", str);
int l = strlen(str);
mat c(l);
for (int i = 0; i < l; i++)
for (int j = 0; j < l; j++) {
if (i == 0)
c.s[i][0] = c.s[i][l - 1] = 1;
else
c.s[i][i - 1] = c.s[i][i] = 1;
}
mat tmp(l);
for (int i = 0; i < l; i++)
tmp.s[i][0] = str[i] - '0';
mat ans = pow_mod(c, t);
ans = ans * tmp;
for (int i = 0; i < l; i++)
printf("%d", ans.s[i][0]);
printf("\n");
}
return 0;
}
HDU2276 - Kiki & Little Kiki 2(矩阵高速幂)的更多相关文章
- UVA 11551 - Experienced Endeavour(矩阵高速幂)
UVA 11551 - Experienced Endeavour 题目链接 题意:给定一列数,每一个数相应一个变换.变换为原先数列一些位置相加起来的和,问r次变换后的序列是多少 思路:矩阵高速幂,要 ...
- UVA10518 - How Many Calls?(矩阵高速幂)
UVA10518 - How Many Calls?(矩阵高速幂) 题目链接 题目大意:给你fibonacci数列怎么求的.然后问你求f(n) = f(n - 1) + f(n - 2)须要多少次调用 ...
- HDU2842-Chinese Rings(递推+矩阵高速幂)
pid=2842">题目链接 题意:求出最少步骤解出九连环. 取出第k个的条件是,k-2个已被取出,k-1个仍在支架上. 思路:想必九连环都玩过吧,事实上最少步骤就是从最后一个环開始. ...
- uva 10655 - Contemplation! Algebra(矩阵高速幂)
题目连接:uva 10655 - Contemplation! Algebra 题目大意:输入非负整数,p.q,n,求an+bn的值,当中a和b满足a+b=p,ab=q,注意a和b不一定是实数. 解题 ...
- hdu 3221 Brute-force Algorithm(高速幂取模,矩阵高速幂求fib)
http://acm.hdu.edu.cn/showproblem.php?pid=3221 一晚上搞出来这么一道题..Mark. 给出这么一个程序.问funny函数调用了多少次. 我们定义数组为所求 ...
- HDU5015 233 Matrix(矩阵高速幂)
HDU5015 233 Matrix(矩阵高速幂) 题目链接 题目大意: 给出n∗m矩阵,给出第一行a01, a02, a03 ...a0m (各自是233, 2333, 23333...), 再给定 ...
- [POJ 3150] Cellular Automaton (矩阵高速幂 + 矩阵乘法优化)
Cellular Automaton Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 3048 Accepted: 12 ...
- HDU 1575 Tr A(矩阵高速幂)
题目地址:HDU 1575 矩阵高速幂裸题. 初学矩阵高速幂.曾经学过高速幂.今天一看矩阵高速幂,原来其原理是一样的,这就好办多了.都是利用二分的思想不断的乘.仅仅只是把数字变成了矩阵而已. 代码例如 ...
- HDOJ 4686 Arc of Dream 矩阵高速幂
矩阵高速幂: 依据关系够建矩阵 , 高速幂解决. Arc of Dream Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/ ...
随机推荐
- java中如何计算两个时间段的月份差
直接计算,先取得两个日期的年份和月份,月份差=(第二年份-第一年份)*12 + 第二月份-第一月份
- 如何在内存中压缩并加密ZIP
项目中遇到了一个问题,考虑到安全原因,需要将文件以二进制数据的方式打包成压缩文件,并且这个压缩文件是有密码的. 去Google上找了些API,下载来看了下,琢磨出了以下方法 首先放API: <! ...
- HDU OJ 4334 Trouble 2012 Multi-University Training Contest 4
题目:click here 题意: 给定5组数据,每组数据选择一个数,看是否能找到5个数的和为零. 分析: 千万不要~~T~~ 普通线性查找: #include <iostream> #i ...
- 如何在Mac系统安装eclipse并运行java程序?
链接地址:http://jingyan.baidu.com/article/7f41ecece8ef5b593c095c71.html eclipse现在也有 Mac版了,我们快来试一试吧!现在我将带 ...
- MSSQL 修改数据库的排序规则
1.修改数据库排序规则 ALTER DATABASE [CHARACTER] COLLATE Chinese_PRC_CI_AS ; 2.修改表中列的排序规则 如果下列其中之一当前正在引用一个列,则无 ...
- RAW模板开发必备知识
写这个主要是为了让已经熟练掌握PHP的人能够快速的掌握RAW模板开发,从而享受RAW的优越! (注:在实际开发中,最好注意RAW模板开发统一规范,那样可以增强用户体验) 废话不多说,进入正题. 需要记 ...
- [LeetCode]题解(python):129-Sum Root to Leaf Numbers
题目来源: https://leetcode.com/problems/sum-root-to-leaf-numbers/ 题意分析: 一棵树,从跟节点到叶子节点比如1->2那么这个叶子代表12 ...
- 未能加载文件或程序集“xxxx”或它的某一个依赖项
一般是解决方案中相互依赖的项目生成的目标平台不一样所致,更改为相同目标即可!
- 射频识别技术漫谈(23)——ISO15693的载波、调制与编码
射频识别技术中的通讯大多是主从式,主动方一般是读写器,被动方称为“卡片”或“标签”.到底是叫“卡片”还是“标签”,好像也没有严格的区分.习惯上可以从以下4个方面界定:一是形状,卡片通常体积较大,更像“ ...
- ISO/IEC 14443协议浅谈
一. 非接触IC卡简介 非接触IC卡又称射频卡,是射频识别技术和IC卡技术有机结合的产物.它解决了无源(卡中无电源)和免接触这一难题,具有更加方便.快捷的特点,广泛用于电子支付.通道控制.公交收费.停 ...