BZOJ-1008 [HNOI2008]越狱
ops,又是一道水水的,再下去我估计要被水给淹了。。。
最最最最最最简单的组合数学。。
题目: http://www.lydsy.com/JudgeOnline/problem.php?id=1008
考虑不能越狱的情况,对于某一间,只用考虑上一间的状况,即不能选择和上一间一样的宗教
所以不能越狱的总数为 m*(m-1)^(n-1)
然后用所有排列减一减
ans=m^n-m*(m-1)^(n-1)
484很水。。。
23行的代码好久没写啦,爽爽爽~~~
#include <iostream>
#include <cstdio>
#define mod 100003
#define ll long long
using namespace std;
long long ans;
long long n,m;
long long ksm(long long xx,long long yy) //xx^yy
{
long long sum=1;
for (;yy;yy>>=1) { if (yy&1) sum=sum*xx%mod; xx=xx*xx%mod; }
return sum;
}
int main()
{
scanf("%lld%lld",&m,&n);
ans=(ksm((ll)m,(ll)n)%mod-m*ksm((ll)m-1,(ll)n-1)%mod+mod)%mod;
printf("%lld\n",ans);
return 0;
}
然而坑爹的地方就在 ans=(ksm((ll)m,(ll)n)%mod-m*ksm((ll)m-1,(ll)n-1)%mod+mod)%mod;
为什么要加一个mod呢,因为它有负数,然而不能输出负数所以就坑了QAQ
PS.坚持都用long long 吧,有利身心健康
评论 (0)