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 ...
随机推荐
- 抓包工具Fiddler使用教程
一.基本原理 Fiddler 是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888 二.Fiddler抓取https设置 1.启动Fiddler,打开菜单栏中的 Too ...
- DC010的精华分享【首发速看】
世界黑客大会[DC010] 是全球安全圈最神秘.最前沿的黑客大派对 而作为中国首个受DEFCON授权支持成立的 地区性 信息 安全 技术交流平台 DEFCONGROUP 010(DC010) 在国内 ...
- [Swift实际操作]八、实用进阶-(2)Swift语言中的三种消息传递模式
本文将通过响应按钮的点击事件,来演示Target-Action消息传递机制,该机制主要用于响应用户的界面操作.打开创建的空白项目.然后在左侧的项目导航区,打开视图控制器的代码文件:ViewContro ...
- mysql导入大批量数据出现MySQL server has gone away的解决方法
因工作需要,需要导入一个200M左右的sql到user库 执行命令 mysql> use user Database changed mysql> source /tmp/user.sql ...
- 收集vcftools所有用法
VCFtools用来处理VCF文档. 筛选特定突变 比较文件 总结突变 转化文件格式 验证并合并文件 取突变交集和差集 Get basic file statistics input可以为VCF或BC ...
- laravel 表单接收
POST方式接收 视图层 <form action="/submit" method="post"> {{csrf_field()}} //必 ...
- vSphere虚拟主机安装Centos7系统
经过上一帖的主机设置,这一步就可以开始安装系统了,本次详细记录各个过程并分析结果. Centos7 1.右键点击列表中的虚拟主机,打开控制台. 点击绿色开机键,开始安装. 这里有一个很关键的点,就是上 ...
- 【Kafka源码】Kafka代码模块
Kafka源码依赖于Scala环境,首先需要安装scala,这块请自行百度进行安装. 传送门 当然,我们要分析源码,需要下载源码,请自行从github上面下载. 说明:本文使用的kafka版本为0.1 ...
- git --mixed --soft --hard之间的区别
git reset --mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和add信息git reset --soft:回退到某个 ...
- JavaScript设计模式-1.函数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...