`
Simone_chou
  • 浏览: 192675 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Kiki & Little Kiki 2(矩阵快速幂)

    博客分类:
  • HDOJ
 
阅读更多

Kiki & Little Kiki 2

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1894    Accepted Submission(s): 979


Problem Description
There are n lights in a circle numbered from 1 to n. The left of light 1 is light n, and the left of light k (1< k<= n) is the light k-1.At time of 0, some of them turn on, and others turn off.
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)

 

 

Input
The input contains one or more data sets. The first line of each data set is an integer m indicate the time, the second line will be a string T, only contains '0' and '1' , and its length n will not exceed 100. It means all lights in the circle from 1 to n.
If the ith character of T is '1', it means the light i is on, otherwise the light is off.

 

 

Output
For each data set, output all lights' state at m seconds in one line. It only contains character '0' and '1.
 

 

Sample Input
1
0101111
10
100000001
 

 

Sample Output

 

1111000
001000010

      题意:

      给出 m (1 ~ 10 ^ 8),代表有 m 秒钟,后给出 n(1 ~ 100) 个灯的开关状态(环)。每一秒钟如果该灯的左边灯是 1 的话,则改变自身灯的状态,输出当过了 m 秒后灯的状态。

 

      思路:

      矩阵快速幂。设 a,b,c 三盏灯:

      ai+1 = (ci + ai)% 2;

      bi+1 = (ai + bi)% 2;

      ci+1 = (bi + ci)% 2;所以可以得到矩阵:

      

      vector 中的 size 函数导致了 TLE, 每次循环求长度浪费了不少的时间,在已知的长度下就可以不用求了。

     

       AC:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

typedef vector<int> vec;
typedef vector<vec> mat;
int len;

mat mul (mat a, mat b) {
    mat c(len, vec(len));

    for (int i = 0; i < len; ++i) {
        for (int j = 0; j < len; ++j) {
            for (int k = 0; k < len; ++k) {
                c[i][j] = (a[i][k] * b[k][j] + c[i][j]) % 2;
            }
        }
    }

    return c;
}

mat pow (mat a, int n) {
    mat b(len, vec(len));
    for (int i = 0; i < len; ++i) {
        b[i][i] = 1;
    }

    while (n > 0) {
        if (n & 1) b = mul(b, a);
        a = mul(a, a);
        n >>= 1;
    }

    return b;
}

int main() {
    int n;
    char str[105];

    while (~scanf("%d%s", &n, str)) {

        len = strlen(str);

        mat a(len, vec(len));
        for (int i = 0; i < len; ++i) {
            if (!i) a[i][i] = a[i][len - 1] = 1;
            else a[i][i] = a[i][i - 1] = 1;
        }

        a = pow(a, n);

        for (int i = 0; i < len; ++i) {
            int res = 0;
            for (int j = 0; j < len; ++j) {
                res ^= (a[i][j] & (str[j] - '0'));
            }
            printf("%d", res);
        }

        printf("\n");
    }

    return 0;
}

 

  • 大小: 854.1 KB
分享到:
评论

相关推荐

    kiki:来自新的宏基因组组装

    克隆 Kiki 存储库 git 克隆 (或 'git clone git://github.com/GeneAssembly/kiki.git' 用于只读访问) 确保安装了 CMake 构建和测试 cd 琪琪目录光盘仓.. 使气./ki -i ../test/short.fa -o 测试cat test.contig*...

    KIKI Pro视频编辑器Android Studio Java 项目源码

    KIKI专业视频编辑器应用程序是非常快速和有用的应用程序与Android的无限功能11支持,它有很多功能,如,视频编辑器,照片到GIF,视频到照片,快动作,慢动作,视频静音像许多功能和易于使用.而在这个应用程序有订阅...

    kiki-turtle:利用链式语法包装turtle库,使之更符合自然语言和思维,提高turtle库的表达能力。从schemdraw的链式语法,加工的函数中得到了启发

    在实际应用中,Kiki-Turtle不仅可以用于教学,帮助初学者更好地理解编程,还可以在项目开发中提供便利,特别是对于需要快速原型设计或者需要绘制复杂图形的场合。通过这个库,你可以更容易地创建出富有创意和艺术感...

    kiki第02课 唐太宗与贞观之治.ppt

    kiki第02课 唐太宗与贞观之治.ppt

    Kiki儿童保护系统 v1.0.0.9.zip

     《Kiki儿童保护系统》是一款专为4-12岁少年儿童使用的强大安全保护系统,旨在为我们祖国未来的小花朵保驾护航,让他们在健康的互联网中翱翔。  《Kiki儿童保护系统》具有如下特点:界面直观简单易用;极具人性化...

    kiki修改版qq魔法表情(200个表情)

    "kiki修改版qq魔法表情(200个表情)"是一个针对QQ魔法表情的定制版本,由用户kiki进行了修改,包含了200个不同的表情资源,可能在原有的基础上增加了新的设计或优化了表现效果。 在这个压缩包文件中,我们可以看到...

    scratch3源码微型地下城-完整的游戏Kiki'sMicroDungeon-FullGame

    scratch3源码微型地下城-完整的游戏Kiki'sMicroDungeon-FullGame本资源系百度网盘分享地址

    kikiUCE修改器

    `kiki.dll`、`stealth.dll` 可能是kikiUCE修改器的自定义插件或模块,`kiki.dll` 可能是修改器的主体部分,提供了用户界面和主要功能;而`stealth.dll`可能涉及隐藏或防检测技术,以降低被游戏服务器检测到作弊的...

    前后端服务化分离中间件,私有项目要过期了,把部分源代码开源_koa-kiki.zip

    前后端服务化分离中间件,私有项目要过期了,把部分源代码开源_koa-kiki

    PyTorch1.0.0版环境搭建,yolov3训练自己的数据集进行目标检测__PyTorch-YOLOv3_kiki.zip

    PyTorch1.0.0版环境搭建,yolov3训练自己的数据集进行目标检测__PyTorch-YOLOv3_kiki

    kiki:离线工作的实验性社交网络

    kiki是一个实验性社交网络。 奇奇与其他社交网络有何不同? 主要区别在于社交网络始终存在于您的计算机上。 这意味着kiki将脱机工作,并且没有人会跟踪您。 在kiki中,您是云的一部分。 当您使用kiki向朋友发布...

    kiki-s-Delivery-Service-Portfolio

    在这个项目中,可能会看到这些元素用于构建不同板块的内容,如关于Kiki的信息、服务介绍、作品展示等。 其次,CSS(Cascading Style Sheets)是与HTML紧密配合的样式表语言,用于控制网页的外观和布局。"kiki's ...

    我的迪杰斯特拉算法小结

    迪杰斯特拉(Dijkstra)算法是解决单源最短路径问题的一种经典算法,由...在城市公交路线规划问题中,通过迪杰斯特拉算法可以快速找到从Kiki的家出发到其他任意站点的最短时间,帮助她避免晕车并尽可能早地到达朋友家。

    avr-net-io_kiki1.2 android

    avr-net-io kikiv1.2 android网络远程开发

    Kiki-sPortfolio

    在Kiki的网页中,这些元素将被巧妙地组合起来,以呈现专业且有吸引力的布局。 样式化是HTML网页设计不可或缺的一部分。虽然"Kiki's Portfolio"没有提及CSS(Cascading Style Sheets),但HTML文件通常会链接到CSS...

    kiki_portfolio

    《kiki_portfolio——深入探索CSS世界》 "kiki_portfolio"是一个典型的个人作品集项目,它充分展示了CSS在网页设计中的强大魅力。在这个项目中,我们不仅能看到精美的视觉效果,还能深入理解CSS的核心概念和技术...

    kiki the nanobot-开源

    kiki nanobot是3D益智游戏。 它基本上是游戏推箱子和库拉世界的混合体。

    Kikiuce 1.4

    2. **界面改进**:考虑到XP的界面相对陈旧,Kikiuce 1.4可能提供了视觉风格的更新,使用户界面更符合现代审美,或者增加了自定义主题和壁纸的功能。 3. **兼容性增强**:为了使XP能运行更多现代应用,Kikiuce 1.4...

    kiki7000.github.io:我的网站

    kiki7000.github.io 我的网站 执照 MIT License Copyright (c) 2021 kiki7000 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation ...

    kiki-web--demo:产业新尖兵web基础程式设计

    【标题】"kiki-web--demo:产业新尖兵web基础程式设计" 涉及的是Web开发的基础知识,特别是HTML语言的应用。这个项目可能是为了教导初学者如何进行Web前端开发,通过创建一个示例应用来实践编程技能。 【描述】中的...

Global site tag (gtag.js) - Google Analytics