HDU 2276 Kiki & Little Kiki 2 矩阵构造
Kiki & Little Kiki 2
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1659 Accepted Submission(s): 837
Change the state of light i (if it's on, turn off it; if it is not on, turn on it) at t+1 second (t >= 0), if the left of light i is on !!! Given the initiation state, please find all lights’ state after M second. (2<= n <= 100, 1<= M<= 10^8)
If the ith character of T is '1', it means the light i is on, otherwise the light is off.
/*
题意:一个灯环,输出进行N此变化的结果,变化的规则是:如果左边是1,那么自己变成相反的
1变成0 0变成1 。第一个要以最后一个为参考。 矩阵的变化, | 1 0 0 0 0 1| a1 | (a1+a6)%2 |
| 1 1 0 0 0 0| a2 | (a1+a2)%2 |
| 0 1 1 0 0 0| a3 === | (a2+a3)%2 |
| 0 0 1 1 0 0| a4 | (a3+a4)%2 |
| 0 0 0 1 1 0| a5 | (a4+a5)%2 |
| 0 0 0 0 1 1| a6 | (a5+a6)%2 | 利用矩阵相乘就可以快速到求取出来.
优化1.由于左边是稀疏矩阵,那么在矩阵相乘到时候,可以优化。代码中有!!~
优化2.用位操作。怎么用位操作实现?
优化3.在快速幂的时候,顺序的变化。因为稀疏矩阵的存在,所以改变一下顺序
就会有提高。代码中有...
*/ #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std; char a[];
struct node
{
int mat[][];
}M_tom,M_hxl; void make_first(node *cur,int len)
{
int i,j;
for(i=;i<=len;i++)
for(j=;j<=len;j++)
if(i==j) cur->mat[i][j]=;
else cur->mat[i][j]=;
} void cheng2(node cur,char a[],int len)
{
node ww;
int i,j,k;
memset(ww.mat,,sizeof(ww.mat));
for(i=;i<=len;i++)
for(k=;k<=len;k++)
if(cur.mat[i][k])
{
for(j=;j<=;j++)
{
ww.mat[i][j]=(ww.mat[i][j]^(cur.mat[i][k]&(a[k]-'')))&;
}
}
for(i=;i<=len;i++)
printf("%d",ww.mat[i][]);
printf("\n");
} struct node cheng(node cur,node now,int len)
{
node ww;
int i,j,k;
memset(ww.mat,,sizeof(ww.mat));
for(i=;i<=len;i++)
for(k=;k<=len;k++)
if(cur.mat[i][k])//对稀疏矩阵的优化
{
for(j=;j<=len;j++)
{
if(now.mat[k][j])//同理
{
ww.mat[i][j]=(ww.mat[i][j]^(cur.mat[i][k]&now.mat[k][j]))&;
}
}
}
return ww;
} void make_init(int len)
{ for(int i=;i<=len;i++)
M_hxl.mat[][i]=; M_hxl.mat[][]=;
M_hxl.mat[][len]=;
for(int i=;i<=len;i++)
for(int j=;j<=len;j++)
if(i==j || i-==j)
M_hxl.mat[i][j]=;
else M_hxl.mat[i][j]=;
} void power_sum2(int n,int len,char a[])
{
make_first(&M_tom,len);
while(n)
{
if(n&)
{
M_tom=cheng(M_hxl,M_tom,len);//这也是优化。顺序改变结果就不同了
}
n=n>>;
M_hxl=cheng(M_hxl,M_hxl,len);
}
// cs(len);
cheng2(M_tom,a,len);
} int main()
{
int n,len;
while(scanf("%d",&n)>)
{
scanf("%s",a+);
len=strlen(a+);
make_init(len);
power_sum2(n,len,a);
}
return ;
}
HDU 2276 Kiki & Little Kiki 2 矩阵构造的更多相关文章
- 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 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 ...
- HDU2276 Kiki & Little Kiki 2 矩阵快速幂
Kiki & Little Kiki 2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- [HDU2276]Kiki & Little Kiki 2
题目:Kiki & Little Kiki 2 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2276 分析: 1)如果前一盏灯亮着,则改变这一盏灯 ...
- HDU 2276 Kiki & Little Kiki 2( 矩阵快速幂 + 循环同构矩阵 )
蒟蒻的我还需深入学习 链接:传送门 题意:给出一个长度为 n,n 不超过100的 01 串 s ,每当一个数字左侧为 1 时( 0的左侧是 n-1 ),这个数字就会发生改变,整个串改变一次需要 1s ...
- 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 ...
随机推荐
- DC010的精华分享【首发速看】
世界黑客大会[DC010] 是全球安全圈最神秘.最前沿的黑客大派对 而作为中国首个受DEFCON授权支持成立的 地区性 信息 安全 技术交流平台 DEFCONGROUP 010(DC010) 在国内 ...
- linux centos 7 下安装ElasticSearch5.4
一. 把elasticsearch-5.4.0.rpm和kibana-5.4.0-x86_64.rpm上传到centos下/root目录中,如下图:二.进入centos目录/root,并用命令rpm ...
- [Swift实际操作]八、实用进阶-(2)Swift语言中的三种消息传递模式
本文将通过响应按钮的点击事件,来演示Target-Action消息传递机制,该机制主要用于响应用户的界面操作.打开创建的空白项目.然后在左侧的项目导航区,打开视图控制器的代码文件:ViewContro ...
- Unity 下集成第三方原生 SDK,以极光厂商通道为例
Unity中集成三方SDK有两种方式: Unity 项目开发中时常有集成 Android 第三方 SDK 的需求,比如接入第三方推送,分享等功能.而第三方 SDK 的集成文档提到的往往是基于原生 An ...
- 2016级算法第六次上机-C.AlvinZH的学霸养成记II
1032 AlvinZH的学霸养成记II 思路 中等题,贪心. 所有课程按照DDL的大小来排序. 维护一个当前时间curTime,初始为0. 遍历课程,curTime加上此课程持续时间d,如果这时cu ...
- C#-WebForm JS定时器
JS定时器: 1.window.setTimeout(function(){},3000) 延迟3秒执行 2.window.setInterval(function(){},3000) 也叫重复器,每 ...
- Hexo博客系列(三)-将Hexo v3.x个人博客发布到GitLab Pages
[原文链接]:https://www.tecchen.xyz/blog-hexo-env-03.html 我的个人博客:https://www.tecchen.xyz,博文同步发布到博客园. 由于精力 ...
- 北航操作系统实验2019:Lab4-1流程梳理
北航操作系统实验2019:Lab4-1流程梳理 前言 操作系统的实验课实在令人头秃.我们需要在两周时间内学习相关知识.读懂指导书.读懂代码.补全代码.处理玄学bug和祖传bug,以及回答令人窒息的思考 ...
- 代码版本控制:git使用
1.https://github.com/ 注册账号 2. 点击 Start a project 3. 4. 5. Clone or download 6. 安装git 7. ...
- Homebrew设置代理
在终端上输入环境变量: export ALL_PROXY=socks5://127.0.0.1:1080 注意:这个只在当前生效,关闭终端就不行了. 原理:本身使用curl进行访问,所以通过环境变量能 ...