pid=2276">题目链接

题意:有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 &amp; Little Kiki 2(矩阵高速幂)的更多相关文章

  1. UVA 11551 - Experienced Endeavour(矩阵高速幂)

    UVA 11551 - Experienced Endeavour 题目链接 题意:给定一列数,每一个数相应一个变换.变换为原先数列一些位置相加起来的和,问r次变换后的序列是多少 思路:矩阵高速幂,要 ...

  2. UVA10518 - How Many Calls?(矩阵高速幂)

    UVA10518 - How Many Calls?(矩阵高速幂) 题目链接 题目大意:给你fibonacci数列怎么求的.然后问你求f(n) = f(n - 1) + f(n - 2)须要多少次调用 ...

  3. HDU2842-Chinese Rings(递推+矩阵高速幂)

    pid=2842">题目链接 题意:求出最少步骤解出九连环. 取出第k个的条件是,k-2个已被取出,k-1个仍在支架上. 思路:想必九连环都玩过吧,事实上最少步骤就是从最后一个环開始. ...

  4. uva 10655 - Contemplation! Algebra(矩阵高速幂)

    题目连接:uva 10655 - Contemplation! Algebra 题目大意:输入非负整数,p.q,n,求an+bn的值,当中a和b满足a+b=p,ab=q,注意a和b不一定是实数. 解题 ...

  5. hdu 3221 Brute-force Algorithm(高速幂取模,矩阵高速幂求fib)

    http://acm.hdu.edu.cn/showproblem.php?pid=3221 一晚上搞出来这么一道题..Mark. 给出这么一个程序.问funny函数调用了多少次. 我们定义数组为所求 ...

  6. HDU5015 233 Matrix(矩阵高速幂)

    HDU5015 233 Matrix(矩阵高速幂) 题目链接 题目大意: 给出n∗m矩阵,给出第一行a01, a02, a03 ...a0m (各自是233, 2333, 23333...), 再给定 ...

  7. [POJ 3150] Cellular Automaton (矩阵高速幂 + 矩阵乘法优化)

    Cellular Automaton Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 3048   Accepted: 12 ...

  8. HDU 1575 Tr A(矩阵高速幂)

    题目地址:HDU 1575 矩阵高速幂裸题. 初学矩阵高速幂.曾经学过高速幂.今天一看矩阵高速幂,原来其原理是一样的,这就好办多了.都是利用二分的思想不断的乘.仅仅只是把数字变成了矩阵而已. 代码例如 ...

  9. HDOJ 4686 Arc of Dream 矩阵高速幂

    矩阵高速幂: 依据关系够建矩阵 , 高速幂解决. Arc of Dream Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/ ...

随机推荐

  1. JavaWeb学习过程 之c3p0的使用

    这几天在学习使用MVC模式来做几个小项目,在学习的过程中,用到了数据库连接池.便特意去学习了一下. 一.谈一谈为什么要使用数据库连接池 在开发基于数据库的web程序时,传统的模式(在servlet,b ...

  2. [Swust OJ 385]--自动写诗

    题目链接:http://acm.swust.edu.cn/problem/0385/ Time limit(ms): 5000 Memory limit(kb): 65535    Descripti ...

  3. [LeetCode]题解(python):117-Populating Next Right Pointers in Each Node II

    题目来源: https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ 题意分析: 根据上一题,如果给定 ...

  4. 关于 OnCloseQuery: 顺序、不能关机等(所有的windows的广播消息都是逐窗口传递的)——如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了

    系统关闭窗体的事件顺序为: OnCloseQuery ----> OnClose ----> OnDestroy 下面的代码说明问题: unit Unit3; interface uses ...

  5. MySql学习笔记(转载)

    . 数值类型 -- a. 整型 ----------     类型            字节        范围(有符号位)     tinyint        1字节    - ~        ...

  6. 入门Html

    html 超文本标记语言(Hypertext Markup Language),用于描写网页文档的标记语言,最新的版本为5.0.由万维网制定 和更新,其实它本质还是文本文件,只不过需要浏览器来解释显示 ...

  7. Ext JS学习第二天 我们所熟悉的javascript(一)

    此文用来记录学习笔记: •ExtJS是一个强大的javascript框架,如果想真正的掌握ExtJS,那么我们必须要对javascript有一定的认识,所以很有必要静下心来,抱着一本javascrip ...

  8. HttpWebRequest和WebClient的区别

     HttpWebRequest和WebClient的区别(From Linzheng): 1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Creat ...

  9. the convertion between string and BlobColumn

    It's hard to find some samples about the convertion between string and BlobColumn.AddBlobData. It's ...

  10. C++之类的静态变量

    成员变量 通过对象名能够访问public成员变量 每个对象都可以有只属于自己的成员变量 成员变量不能在对象之间共享 类的静态成员 静态成员变量  存储在   全局数据区 #include<std ...