题目描述

原题来自:HNOI 2008

监狱有连续编号为 1 到 n 的 n 个房间,每个房间关押一个犯人。有 m 种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人信仰的宗教相同,就可能发生越狱。求有多少种状态可能发生越狱。

输入格式

输入两个整数 m 和n 。

输出格式

可能越狱的状态数,对 100003 取余。

样例

样例输入

2 3

样例输出

6

样例说明

所有可能的 6 种状态为:

{0,0,0}{0,0,1}{0,1,1}{1,0,0}{1,1,0}{1,1,1}。

数据范围与提示

对于全部数据,1<=m<=1e8,1<=n<=1e12。

______________________________________________

动态规划,f[i]表示到第i个房间越狱的情况有多少种。

则:f[i]=f[i-1]*m+(m^(i-1)-f[i-1])=m^(i-1)+(m-1)f[i-1]

f[i-1]*m表示前i-1个房间已经出现越狱情况,则第i个房间随便放一个宗教的犯人都会出现越狱

(m^(i-1)-f[i-1])表示前i-1个房间没有出现越狱的情况等于所有的情况减去有越狱的情况。

数据太大,需要矩阵快速幂。

[ 0 , 1 ]          [m-1,0 ]

[m   ,m ]

______________________________________________

 1 #include<bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const ll mod=100003;
5 ll n,m;
6 struct jz22
7 {
8 ll jz[2][2];
9 jz22()
10 {
11 jz[1][0]=jz[1][1]=m;
12 jz[0][0]=m-1;
13 jz[0][1]=0;
14 }
15 jz22 operator * (jz22 const &a)const
16 {
17 jz22 b;
18 for(int i = 0;i<2;++i)
19 for(int j=0 ;j<2;++j)
20 {
21 b.jz[i][j]=0;
22 for(int k=0;k<2;++k)
23 b.jz[i][j]=(b.jz[i][j]+jz[i][k]*a.jz[k][j])%mod;
24 }
25 return b;
26 }
27 };
28 jz22 pow(jz22 a,ll p)
29 {
30 if(p==1)return a;
31 jz22 ans=pow(a,p/2);
32 ans=ans*ans;
33 ans.jz[0][0]%=mod;
34 ans.jz[0][1]%=mod;
35 ans.jz[1][0]%=mod;
36 ans.jz[1][1]%=mod;
37 if(p%2)
38 {
39 ans=ans*a;
40 ans.jz[0][0]%=mod;
41 ans.jz[0][1]%=mod;
42 ans.jz[1][0]%=mod;
43 ans.jz[1][1]%=mod;
44 }
45 return ans;
46 }
47 int main()
48 {
49 cin>>m>>n;
50 n--;
51 m%=mod;
52 jz22 a,b,c;
53 b=pow(a,n);
54 cout<<b.jz[1][0];
55 return 0;
56 }

LOJ10196越狱的更多相关文章

  1. 【转】 iOS9.2-iOS9.3.3越狱插件清单

    以下是iOS9.3.3越狱插件清单 原文地址:http://bbs.feng.com/read-htm-tid-10668605.html 序列 支持与否 插件名称 兼容版本 支持设备 1 是 20 ...

  2. 微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析

    作者:蒸米@阿里移动安全 序言 微信作为手机上的第一大应用,有着上亿的用户.并且很多人都不只拥有一个微信帐号,有的微信账号是用于商业的,有的是用于私人的.可惜的是官方版的微信并不支持多开的功能,并且频 ...

  3. ios7迎来完美越狱,果粉狂欢!

    [我要]最近一则iOS7可以完美越狱的消息,可是乐坏了期待已久的果粉们.据科技博客网站Gizmodo报道,越狱专家Evasi0n团队最近攻破苹果的 iOS7系统,赶在圣诞前发布了iOS7的越狱.消息一 ...

  4. IOS判断设备是否已越狱

    转自:http://www.cnblogs.com/supercheng/archive/2012/12/05/2804166.html - (BOOL)isJailbroken { BOOL jai ...

  5. 【洛谷P3197】越狱

    本来还想了一会dp-- 然而一看数据范围明显是数论-- 那么推一推.. 我们发现可以用总方案数减去不会越狱的方案数 那么我们考虑在长度为n的数列中填数 首先第一个位置有m种选择,后面的位置: 总方案: ...

  6. iOS设备的越狱方法

    最近公司的事情很忙,在开发一个类似于微信的App,经常加班,所以也没有时间去更新微信公众账号的内容了.iOSJailbreak, 申请这个账号大概有一个多月了吧,发布的内容不多,更多是针对开发者的内容 ...

  7. iOS越狱开发(一)

    做越狱开发也有一些时间了,有很多东西想总结一下,希望给他人一些借鉴,也是自己对过去开发经历的一些总结.个人不推荐使用盗版,这里主要以技术介绍为主. 这个系列里面主要介绍怎样进行越狱开发,涉及到以下几个 ...

  8. 借助91助手,将ibook中的pdf文件拷贝至其它的pdf阅读器中(ios设备无需越狱)

    有时候在使用ios自带的ibook阅读pdf文件的时候,会发现ibook有些功能并不是那么方便.最近我就遇到了一例,我想在ibook中放一本比较大的pdf书,页数有几百吧,pdf文件本身每一章节都是有 ...

  9. 越狱后的ios如何用apt-get 安装各种命令

    越狱后的ios如何用apt-get 安装各种命令   iphone越狱后想玩linux. 1. ssh 客户端:ssh Term Pro. 2. 只装客户端是连不上的,还得一个 ssh connect ...

随机推荐

  1. springboot日志输出到文件

    今天来谈一谈日志,主要是说一说springboot的日志,因为最近在学习springboot.首先在写代码的时候,要养成记日志的习惯,这点真的很重要,因为之前吃了很多亏.过去我对日志很不在意,该有的日 ...

  2. 在IDEA中的cannot_resolve_method解决方法

    打开IDEA编辑器,点击编辑器左上角file,出现菜单栏,点击菜单栏中的Settings选项.   在出现的Settings窗口中的左侧菜单栏中找到Plugins选项,点击进入'Plugins'窗口. ...

  3. .NET 5 源代码生成器——MediatR——CQRS

    在这篇文章中,我们将探索如何使用.NET 5中的新source generator特性,使用MediatR库和CQRS模式自动为系统生成API. 中介者模式 中介模式是在应用程序中解耦模块的一种方式. ...

  4. 手摸手带你用Hexo撸博客(二)之配置主题

    在上一篇博客手摸手带你用Hexo撸博客(一)中主要介绍了博客的初步搭建 今天我们继续讲如何在Hexo搭建的博客中应用主题 官网选择自己喜欢的主题 点击这里Hexo主题进入官网主题页面 然后选择自己喜欢 ...

  5. 【kinetic】操作系统探索总结(六)使用smartcar进行仿真

    p { margin-bottom: 0.1in; direction: ltr; line-height: 120%; text-align: justify } a:link { color: r ...

  6. 这是一篇SQL注入文章

    目录 注入原理: 1.寻找注入点的方式或注入的地方可能包括. 2.注入点判断方法. 3.注入分类. 数字型: 字符型: 搜索型: XX型(也叫其他型): 4.注入提交方式. 5.注入攻击类型与方式. ...

  7. Ubuntu20.04编译ffmpeg

    1.安装编译所需工具,GCC 2.安装yasm nasm yasm和nasm是两个编译器,编译ffmpeg需要用到 安装命令: sudo aptitude install yasm nasm 3.安装 ...

  8. 如何使用容器镜像服务 TCR 轻松实现容器 DevOps

    作者周明,腾讯云容器产品工程师.目前主要负责腾讯云TKE.TCR等产品控制台的相关研发工作. 概述 当你使用云厂商提供的容器服务部署业务服务后,是否对交付部署全链路的效率有更高的需求,例如实现基于容器 ...

  9. docker安装(yum方式)

    1. 更新现有的yum 包:sudo yum update 2.添加Docker源: 2.1首先创建docker.repo: touch /etc/yum.repos.d/docker.repo [d ...

  10. item系列魔法方法

    class Foo: def __init__(self, name): self.name = name def __getitem__(self, item): print('getitem执行' ...