1008: [HNOI2008]越狱(排列组合)

2024-04-16 02:58

本文主要是介绍1008: [HNOI2008]越狱(排列组合),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

Input
  输入两个整数M,N.1<=M<=108,1<=N<=1012

Output
  可能越狱的状态数,模100003取余

Sample Input
2 3
Sample Output
6
HINT
  6种状态为(000)(001)(011)(100)(110)(111)

Source

思路: 所有组合是m^n,不相邻的组合,第一个有m种,其他n-1个犯人各有m-1种。
所有的组合减去不相邻的组合就是答案。

#include <stdio.h>
#include <algorithm>using namespace std;typedef long long ll;
const int MOD = 100003;ll qpow(ll a,ll b)
{ll res = 1;while(b){if(b & 1)res = (res * a) % MOD;a = (a * a) % MOD;b >>= 1;}return res;
}int main()
{ll m,n;scanf("%lld%lld",&m,&n);printf("%lld\n",(qpow(m,n) - m * qpow(m - 1,n - 1) % MOD + MOD * 10) % MOD);return 0;
}

这篇关于1008: [HNOI2008]越狱(排列组合)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907636

相关文章

任意数字、字符序列,输出它们所有的排列组合

/*** @author Bo年在无木小白*/public class Combination {/*** 任意数字序列“123456”之类,输出它们所有的排列组合*/public static void main(String[] args) {String str = "xafdvs";char[] arr1 = str.toCharArray();char[] arr2 = Arrays.

每日一题——4行Python代码实现PAT乙级1008 数组元素循环右移问题(举一反三+思想解读+逐步优化)四千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 ​编辑我的写法 代码功能 时间复杂度分析 空间复杂度分析 总结 我要更强 方法一:使用循环移位 方法二:使用Python的deque 方法三:使用列表切片和拼接 总结 哲学和编程思

【iOS】越狱环境下iOS实现周边Wi-Fi RSSi值的获取

一、前言 苹果在iOS5推出之后就不再提供能直接获取Wi-Fi RSSI数值的API。本文的方法是在越狱环境下,基于MobileApple80211框架来进行开发,实现自动搜索周边Wi-Fi热点并获取其信息(比如MAC,SSID,RSSI,CHANNEL)。目前该框架成为了私有框架,其中API均为私有API,导致应用不能上App Store,只能等待Apple哪天再次开放API。 二

奋战杭电ACM(DAY5)1008

被前两题虐身虐心后看到这题简直难以置信,怎么可以这么水!!一次AC不解释!!难道老师是故意放这么道水题来安慰我们受伤的小心灵?? Elevator #include <iostream>using namespace std;int main(){int N,i,time;while(cin >> N){if(N==0)break;else{int *q = new int[N+1

【PAT】【Advanced Level】1008. Elevator (20)

1008. Elevator (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The highest building in our city has only one elevator. A request list is made

排列组合和回溯算法

排列组合 排列组合通常用于在字符串或序列的排列和组合中,其特点是固定的解法和统一的代码风格。通常有两种方法:第一种是类似动态规划的分期摊还的方式,即保存中间结果,依次附上新元素,产生新的中间结果;第二种是递归法,通常是在递归函数里,使用for循环,遍历所有排列或组合的可能,然后在for循环语句内调用递归函数。 回溯 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想

双循环比赛队伍排列组合问题

2019/05/12 引言 昨天看比赛的时候,看到了各个队伍的对战,这种应用应该是排列组合中的算法,但不是很明确。搜索了一下相关的算法,看到有用分治法的。这里来把这部分的问题来描述一下。 问题分析 问题来源于最近的MSI比赛: 小组赛共计6支队伍,按照双循环赛事,共计比赛5天,每天打6场,每个队每天打2场,第3天的上半轮(即前三场)完成第一轮循环赛,共计30场比赛。 转化为数学形

hodj 1008 Elevator (模拟题)

个人写的代码不够简洁,而且在处理这种多循环的代码时,每次循环时变量没有重新赋值为0,造成了调试了好几次代码才通过,这是不应该的。在这次代码中,time和current都没有重新赋值为0,下回应该注意。还要网友在代码中对题目的中时间常量进行了赋值,这一点很好,要学习。 代码如下: #include <iostream>#include <algorithm>#include <string>

排列组合板子A(n,m)C(n,m) ; 递推组合数公式 ; 杨辉三角

目录 1.直接求组合数:2.递推组合数公式:3.杨辉三角 1.直接求组合数: 组合数C(n,m),n个里面选m个,结果为 n ! / ( n − m ) ! m ! \frac{n! / (n-m)!}{m!} m!n!/(n−m)!​(前者其实就是n* n-1*…*n-m+1,分子分母都是m个数相乘) ksm快速幂求的是逆元。用的是费马小定理,适用于模数为素数的时候。 快速

九度oj-1008-最短路径问题

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5636 解决:1814 题目描述: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。 输入: 输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费