HYSBZ - 1008 越狱(组合数学)

1008: [HNOI2008]越狱

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 9918  Solved: 4271
[Submit][Status][Discuss]

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)

Source

题目大意:如题

解题思路:n个房间,m种宗教。每个房间都有m种可能,那就有n^m种,反向思考,总数减去相邻两个不相同的数量,就是答案。相邻两个不相同的情况有m*(m-1)^(n-1)种情况。

代码:

#include <cstdio>

using namespace std;
const int mod = 1e5+3;

int ks(long long n,long long k)
{
    long long s=1;
    while(k)
    {
        if(k%2)
            s = s*n%mod;
        n = n*n%mod;
        k /= 2;
    }
    return s;
}

int main()
{
    long long m,n;
    while(scanf("%lld %lld",&m,&n)!=EOF)
    {
        long long tot = ks(m,n);
        long long ret = m*ks(m-1,n-1)%mod;
        long long ans = (tot-ret+mod)%mod;
        printf("%lld\n",ans);
    }
}
时间: 2024-07-29 04:38:37

HYSBZ - 1008 越狱(组合数学)的相关文章

BZOJ 1008 越狱 (组合数学)

题解:正难则反,从总数中减去全部相邻不相同的数目就是答案,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>>

BZOJ 1008 越狱 题解 裸快速幂

BZOJ 1008 越狱 题解 裸快速幂 1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7887  Solved: 3372[Submit][Status][Discuss] Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 Input 输入两个整数M,N.1<=M<

HYSBZ 1008

数学题,推出公式就好了! //Accepted 804 KB 0 ms #include <cstdio> #include <cstring> const long long pp = 100003; long long pow(long long a,long long b) { if (b==0) return 1; if (b==1) return a%pp; long long ans=pow(a,b/2); if (b%2==0) ans=ans*ans%pp; els

BZOJ 1008: [HNOI2008]越狱 组合数学

原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1008 题解: 就很傻逼的组合数学啊... $$ans=M^N-M*(M-1)^{(N-1)}$$ 代码: /************************************************************** Problem: 1008 User: HarryGuo2012 Language: C++ Result: Accepted Time:0 ms Memo

HYSBZ - 1008 一行

监狱有连续编号为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) 1 #include<iost

BZOJ 1008 越狱

这TM就过了? 公式m^n-m*(m-1)^(n-1)加一个快速幂 #include<iostream>#include<cstdio>#include<cstring>#define mod 100003using namespace std;long long n,m;long long pow(long long x,long long y){ long long base=x,ans=1; while (y) { if (y&1) ans=(ans*ba

[BZOJ1008][HNOI2008]越狱 组合数学

正着直接算有点难,我们考虑反着来,用全集减补集. 总的方案数为$m^n$.第一个人有$m$种可能,第二个人有$m-1$种可能,第三个人有$m-1$种可能--发现补集就是$m*(m-1)^{n-1}$.用快速幂搞搞就行了. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 typedef long long ll; 6 const int mod=10

OI刷水记录

3.19 颓了一周: **3211: 花神游历各国 区间开方区间查询 可以用树状数组暴力修改+并查集维护下一个不为1的数 #include<bits/stdc++.h> #define rep(i,l,r) for(int i=l;i<=r;i++) #define N 101333 typedef long long ll; int f[N],a[N],now,m,n,l,r,x,delta; ll c[N]; inline void add(int x,int k){while(x&

BZOJ day8

好吧,, 补一天题解. 1001  狼抓兔子 妥妥的网络流啊,难度仅次于草地排水,边都给出来了.就是注意反向边也要有流量就行. 1007 水平可见直线 这个题按斜率排序(注意不是绝对值),然后将直线入队,如果交点在上一次交点的左边则下面的直线被覆盖, 注意直线斜率想的的时候要按与y轴交点大小排序 1008 越狱 组合题,第一个由m种选择,后面的每一个都是m-1种选择,所以快速幂解决问题 1012 最大数 啊啊啊啊这个东西写线段树调了一上午,都疯了,下午写了个单调队列 几十B 一遍过,哎 #inc