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


    http://www.lydsy.com/JudgeOnline/problem.php?id=1008

    正着直接算有点难,我们考虑反着来,用全集减补集。

    总的方案数为$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=100003;
     7 int quick_pow(int x,ll y){
     8     int base=x,sum=1;
     9     while(y){
    10         if(y&1) sum=(ll)sum*base%mod;
    11         base=(ll)base*base%mod;
    12         y>>=1;
    13     }
    14     return sum;
    15 }
    16 int main(){
    17     ll n,m;
    18     scanf("%lld%lld",&m,&n);
    19     m%=mod;
    20     printf("%d
    ",(quick_pow(m,n)-m%mod*quick_pow(m-1,n-1)%mod+mod)%mod);
    21     return 0;
    22 } 
  • 相关阅读:
    洛谷单元最短路标准版——spfa优化
    airline
    有依赖的背包
    挖地雷
    带分数问题
    子集和问题
    循环比赛日程表
    传纸条
    机器分配
    分组背包
  • 原文地址:https://www.cnblogs.com/halfrot/p/7449941.html
Copyright © 2020-2023  润新知