P3197 [HNOI2008] 越狱
题目传送门
题面
[HNOI2008] 越狱
题目描述
监狱有 n n n 个房间,每个房间关押一个犯人,有 m m m 种宗教,每个犯人会信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。
答案对 100 , 003 100,003 100,003 取模。
输入格式
输入只有一行两个整数,分别代表宗教数 m m m 和房间数 n n n。
输出格式
输出一行一个整数代表答案。
样例 #1
样例输入 #1
2 3
样例输出 #1
6
提示
样例输入输出 1 解释
| 状态编号 | 1 号房间 | 2 号房间 | 3 号房间 |
|---|---|---|---|
| 1 | 信仰 1 | 信仰 1 | 信仰 1 |
| 2 | 信仰 1 | 信仰 1 | 信仰 2 |
| 3 | 信仰 1 | 信仰 2 | 信仰 2 |
| 4 | 信仰 2 | 信仰 1 | 信仰 1 |
| 5 | 信仰 2 | 信仰 2 | 信仰 2 |
| 6 | 信仰 2 | 信仰 2 | 信仰 1 |
数据规模与约定
对于 100 % 100\% 100% 的数据,保证 1 ≤ m ≤ 1 0 8 1 \le m \le 10^8 1≤m≤108, 1 ≤ n ≤ 1 0 12 1 \le n \le 10^{12} 1≤n≤1012。
思路
先正常看,题目难度普及/提高,所以有很大的思维成分在里面。
然后的话这是标签:

明显这是一道排列组合题目。
先考虑会越狱情况下的各种情况
这是样例1的
| 状态编号 | 1 号房间 | 2 号房间 | 3 号房间 |
|---|---|---|---|
| 1 | 信仰 1 | 信仰 1 | 信仰 1 |
| 2 | 信仰 1 | 信仰 1 | 信仰 2 |
| 3 | 信仰 1 | 信仰 2 | 信仰 2 |
| 4 | 信仰 2 | 信仰 1 | 信仰 1 |
| 5 | 信仰 2 | 信仰 2 | 信仰 2 |
| 6 | 信仰 2 | 信仰 2 | 信仰 1 |
很明显,从2个一样信仰的相邻一直到n个一样的信仰相邻都有多种可能,所以从这个方向考虑会很复杂。
那么可以换一种思路,从逆向来想,因为只有两种情况,要么越狱,要么不越狱,所以可以理解为 越狱的情况 = 所有情况 − 不越狱的情况 越狱的情况=所有情况-不越狱的情况 越狱的情况=所有情况−不越狱的情况
那么考虑一下不越狱的情况。
有m中信仰的情况下,具体可以这样分配:
| 1 号房间 | 2 号房间 | 3 号房间 | … | 3n号房间 |
|---|---|---|---|---|
| m种信仰 | m-1种信仰 | m-1种信仰 | m-1种信仰 | m-1种信仰 |
因为为了不和上一个房间的宗教相同,所以剩下了除上一个房间以外m-1种信仰可选,然而第一间左边没有房间可以有m种选择。
因此我们可以把答案弄出来了
a n s = n m − m ∗ ( n − 1 ) m − 1 ans=n^m-m*(n-1)^{m-1} ans=nm−m∗(n−1)m−1
接着看数据范围,保证 1 ≤ m ≤ 1 0 8 1 \le m \le 10^8 1≤m≤108, 1 ≤ n ≤ 1 0 12 1 \le n \le 10^{12} 1≤n≤1012,所以如果用O(n)的时间复杂度会过不了( 1 0 8 10^8 108有的判题机好似可以过)
所以要用快速幂,原理就是倍增思想,时间复杂度降低到了 l o g ( n ) log(n) log(n)
虽然c++本身有快速幂函数pow,不过由于涉及取模,所以需要手写一个。
最后提交上去就会发现有的点WA了,由于这里面取模运算的特性,所以有可能会出现 n m n^m nm取模完以后比后面那一坨还小,这时候我们就应该加上一个模数就可以了
c o d e code code
#include<bits/stdc++.h>
using namespace std;
//#define ll long long防伪认证
#define ld long double
#define FOR(x,a,b,c) for(int x=a;x<=b;x+=c)
#define MFOR(x,a,b,c) for(int x=a;x>=b;x-=c)
#define MPFOR(x,a,b,c) for(int x=a;a<=b;x*=c)
const int N3=1e3+10;
const int N=1e6+10;
const long double esp=1e-8;
bool f[N];
/*/防伪认证
map<ll,int> a;
queue<int> a;
stack<int> a;
priority_queue<int> a;
vector<int> a;
set<int> a;
::iterator it
unordered
/*/
int gcd(int a,int b){int c=a%b;while(a%b!=0){a=b;b=c;c=a%b;}return b;
}
int lcm(int x,int y){return (x*y)/gcd(x,y);
}
void p(int n){f[1]=1;f[0]=1;for(int i=2;i*i<=n;i++){if(f[i]) continue;for(int j=i*i;j<=n;j+=i){f[j]=1;}}
}
ll qpow(ll x,ll y,ll md){//快速幂ll ans=1;while(y){//相当于给他求二进制if(y&1){ans*=x;ans%=md;}x*=x;//倍增思想x%=md;y>>=1;}return ans;
}
ll n,m;
ll ans=1;
int main(){freopen(".in","r",stdin);freopen(".out","w",stdout);ios::sync_with_stdio(false);cin>>m>>n;ans=((qpow(m,n,100003))-m*qpow(m-1,n-1,100003)%100003)%100003;//公式计算if(ans<0) ans+=100003;//特殊情况cout<<ans;fclose(stdin);fclose(stdout);return 0;
}
/*/
思路区
/*/
不要复制以后直接提交,不会AC,会编译错误!!!
相关文章:
P3197 [HNOI2008] 越狱
题目传送门 题面 [HNOI2008] 越狱 题目描述 监狱有 n n n 个房间,每个房间关押一个犯人,有 m m m 种宗教,每个犯人会信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。 …...
会声会影导出视频mp4格式哪个最高清,会声会影输出格式哪个清晰
调高分辨率后,mp4视频还是不清晰。哪怕全部使用4K级素材,仍然剪不出理想中的高画质作品。不是你的操作有问题,而是剪辑软件没选对。Corel公司拥有全球顶尖的图像处理技术,该公司研发的会声会影视频剪辑软件,在过去的20…...
Linux:进程调度算法和进程地址空间
✨✨✨学习的道路很枯燥,希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 进程调度算法 1.1 进程队列数据结构 1.2 优先级 编辑 1.3 活动队列 编辑 1.4 过期队列 1.5 active指针和expired指针 1.6 进程连接 二 进程地址空间 2.1 …...
TCP ---滑动窗口以及拥塞窗口
序言 在上一篇文章中我们介绍了 TCP 中的协议段格式,以及保证其可靠传输的重传机制,着重介绍了三次握手建立连接,四次挥手断开连接的过程(👉点击查看)。 这只是 TCP 保证通信可信策略的一部分,现在让我们继续深入吧&…...
第十二章--- fixed 和 setprecision 函数、round 函数、进制转换及底层逻辑
1. 保留几位小数 在C中,如果你想要控制输出的小数点后的位数,可以使用<iomanip>头文件提供的fixed和setprecision函数。这里的fixed用于设置浮点数的输出格式为定点表示法,而setprecision(n)则用来指定小数点后保留的位数。具体用法如…...
ASP.NetCore---I18n(internationalization)多语言版本的应用
文章目录 0.实现的效果如下1.创建新项目I18nBaseDemo2.添加页面中的下拉框3.在HomeController中添加ChangeLanguage方法4.在Progress.cs 文件中添加如下代码:5. 在progress.cs中添加code6.添加Resource资源文件7.在页面中引用i18n的变量8. 重启项目,应该…...
vue3 环境配置vue-i8n国际化
一.依赖和插件的安装 主要是vue-i18n和 vscode的自动化插件i18n Ally https://vue-i18n.intlify.dev/ npm install vue-i18n10 pnpm add vue-i18n10 yarn add vue-i18n10 vscode在应用商城中搜索i18n Ally:如图 二.实操 安装完以后在对应项目中的跟package.jso…...
2024 uniapp入门教程 01:含有vue3基础 我的第一个uniapp页面
uni-app官网uni-app,uniCloud,serverless,快速体验,看视频,10分钟了解uni-app,为什么要选择uni-app?,功能框架图,一套代码,运行到多个平台https://uniapp.dcloud.net.cn/ 准备工作:HBuilder X 软件 HBuilder X 官网下载…...
CentOS 7文件系统
从centos7开始,默认的文件系统从ext4变成了XFS。随着虚拟化的应用越来越广泛,作为虚拟化磁盘来源的大文件(单个文件几GB级别)越来越常见。 1.XFS组成部分: XFS文件系统在数据的分布上主要划分为三部分:数据…...
vue源码解析(源码解析学习大纲)
文章目录 Vue源码解析入手方向大纲1.核心概念1-1.响应式系统1-2. 组件1-3. 虚拟DOM1-4. 指令1-5. 生命周期钩子 2.虚拟DOM2-1. 概念2-2. 工作流程2-3. 示例2-4.总结 3.组件系统3-1. 组件的定义3-2. 组件的创建3-3. 组件的模板3-4. 生命周期3-5. 事件处理3-6. 插槽(S…...
工行企业网银U盾展期后有两个证书问题的解决方法
工行企业网银U盾证书快到期后,可以自助展期,流程可以根据企业网银提示页面操作。操作后,可能存在两个新旧两个证书并存的情况,致使网银转账等操作失败,如图: 其原因是新证书生成后,旧证书没有删…...
《Linux从小白到高手》理论篇:文件权限控制及文件操作相关的命令
List item 本篇介绍Linux文件权限控制及文件操作相关的命令,看完本文,有关Linux文件权限控制及文件操作相关的常用命令你就掌握了99%了。 文件权限 在介绍文件权限之前先来复习下Linux的文件类型,始终记住那句话:Linux系统下&a…...
前端框架React的详细的学习方法和过程
学习React作为前端架构的一部分,是一个系统且逐步深入的过程。以下是一个详细的学习方法和过程,可以帮助你有效地掌握React: 1. 理解React的基础知识 首先,你需要了解React的基本概念,包括它是什么、为什么使用它以及…...
linux中缓存,在kafka上应用总结
linux中的缓存 页缓存 pagecatch(读缓存用于提供快速读)块缓存(用于提供其他设备快速写)当对读缓存读的时候,修改了读的数据,页缓存就会被标记为脏数据,等到写的时候它会向块缓存同步数据&…...
前端练习小项目 —— 让图片变得更 “色”
前言:相信读者在学习完了HTML、CSS和JavaScript之后已经想要迫不及待的想找一个小型的项目来练练手,那么这篇文章就正好能满足你的 “需求”。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 在开始学习…...
时间卷积网络(TCN)原理+代码详解
目录 一、TCN原理1.1 因果卷积(Causal Convolution)1.2 扩张卷积(Dilated Convolution) 二、代码实现2.1 Chomp1d 模块2.2 TemporalBlock 模块2.3 TemporalConvNet 模块2.4 完整代码示例 参考文献 在理解 TCN 的原理之前ÿ…...
零散的知识
1.物化 在SQL中,物化(Materialization)是指将查询结果保存为物理数据结构以供后续使用的过程。这与普通的视图或查询不同,物化视图会存储查询的结果,而不是每次查询时都动态地重新计算数据。 ①物化视图 物化视图是一…...
Python读取pdf中的文字与表格
一、PyPDF2包安装 在Python中安装PyPDF2库,您可以使用pip包管理器。打开您的命令行工具(例如CMD、Terminal或Anaconda Prompt),然后输入以下命令: pip install PyPDF2 如果您使用的是Python 3,并且系统中…...
【MySQL 08】复合查询
目录 1.准备工作 2.多表查询 笛卡尔积 多表查询案例 3. 自连接 4.子查询 1.单行子查询 2.多行子查询 3.多列子查询 4.在from子句中使用子查询 5.合并查询 1.union 2.union all 1.准备工作 如下三个表,将作为示例,理解复合查询 EMP员工表…...
求1000以内的完数
题目:一个数如果恰好等于他的因子之和(包括1,但不包括这个数),这个数就是完数。编写算法找出1000之内的所有完数,并按下面格式输出其因子:28 its factors are 1,2,4,7,14 代码如下:…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
