【bzoj题解】1008 越狱】的更多相关文章

题目描述 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱. 输入 输入两个整数M,N.1<=M<=10^8,1<=N<=10^12. 输出 可能越狱的状态数,模100003取余 样例输入 2 3 样例输出 6 题解 越狱状态数=总状态数-不越狱状态数=\(m^{n}-m\cdot\left(m-1\right)^{n-1}\) 快速幂+取模 #include&…
其实这题很水,显然n个房间有m种宗教,总共有n^m种情况, 我们再考虑不合法的情况,显然第一个房间有m种情况,而后一种只有m-1种情况(因为不能相同) 所以不合法的情况有(m-1)^(n-1)*m种情况,相减即是答案. 注意一下实现的细节,由于n和m可能很大,模运算时要注意一下(血的教训) # include<iostream> # include<cstdio> # include<cmath> using namespace std; ; typedef long…
http://www.lydsy.com/JudgeOnline/problem.php?id=1008 刚开始看不会做啊,以为是dp,但是数据太大!!!所以一定有log的算法或者O1的算法,,,,还是不会.. 看了题解,,太巧妙了!就是反过来想..所有情况-不会越狱的情况=答案....所有情况很好求,因为每个人都可以是任意种宗教,根据乘法原理,所有情况=m*m*m*m*...*m=m^n:而不会越狱的情况也很好求,因为约束只是临边的人不能是同种宗教,所以我们只要假设临边的人有m-1种选择,而这…
Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 Input 输入两个整数M,N.1<=M<=10^8,1<=N<=10^12 Output 可能越狱的状态数,模100003取余 Sample Input 2 3 Sample Output 6 HINT 6种状态为(000)(001)(011)(100)(110)(111) 组合数学水题…
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1008 题目大意: 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 思路: 用总情况 - 不越狱的情况即可 ans = m ^ n - m * (m - 1)^(n - 1) 特判:m=1 n=1时 ans = 0…
题解:正难则反,从总数中减去全部相邻不相同的数目就是答案,n*(n-1)^(m-1):第一个房间有n中染色方案,剩下m-1个房间均只有n-1种染色方案,用总数减就是答案. #include <cstdio> const int mod=100003; typedef long long LL; LL n,m; LL power(LL a,LL b){ LL ans=1; a%=mod; while(b){ if(b&1)ans=ans*a%mod; a=a*a%mod,b>>…
题目 题目描述 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 输入输出格式 输入格式: 输入两个整数M,N.1<=M<=10^8,1<=N<=10^12 输出格式: 可能越狱的状态数,模100003取余 输入输出样例 输入样例#1: 复制 2 3 输出样例#1: 复制 6 说明 6种状态为(000)(001)(011)(100)(110)(111)    …
@ACMLCZH学长出的毒瘤题T3.再也不是“善良”的出题人了. 题意:bzoj. 题解: 经典的树形DP题目,屡见不鲜了,然而我还是没有写出来. 这一类的题目有很多,例如这里的C题. 主要套路是把对儿子的枚举变成一个类似背包的转移方式,实现降复杂度. 需要注意的是某一个地方的DP值不能直接拿来判断是否有解,例如mod=1时,DP值全为0就没法判断了. 这里比较骚的操作是把mod的倍数变成mod,而0不变,这样就不会漏判. #include<bits/stdc++.h> #define F(i…
如题,题解传送门: 1001 1008 1012…
1041 圆上的整点 暴力枚举 会超时 这道题很像之前一次noip模拟题(当时的我还太水了(虽然现在也很水)) x2+y2=R2 考虑变型 x2=(R+y)(R-y) int d=gcd(R,y) int a=R/d+y/d  b=R/d-y/d; gcd(a,b)=1; x2=d2*a*b; 易得到 a=u2 ,b=v2 v2+u2=2*R/d 然后暴力枚举即可 1045 糖果传递 第一行一个正整数n<=987654321,表示小朋友的个数. 这数据是在开玩笑吧... 看题解发现1e6就够了.…