1. 程式人生 > >洛谷P3197 HNOI2008 越獄

洛谷P3197 HNOI2008 越獄

include mic namespace 註意 ostream microsoft print bsp 需要

  題目傳送門

  實際上昨天大雞哥已經講過這題了,結果沒記住,今天一道相似的題就掛了。。。。。。吃一塹長一智啊。

  思路大致是這樣:如果直接算發生越獄的情況會比較復雜,所以可以用間接法,用安排的總方案-不會發生越獄的方案就可以了。安排的總方案數很顯然就是m^n,那麽只需要求不會發生越獄的方案數就可以了。分析一下,首先在第一個房間安排一種宗教,那麽還剩下m-1種宗教,n-1個房間,因為要與第一個房間不同,則第二個房間就有m-1種安排法,以此類推,第三個房間,第四個以及後面所有房間都是m-1種安排法,所以總的安排法就是m*(m-1)^(n-1)。最終答案就是m^n-m*(m-1)^(n-1),只要再註意取模就OK了。

  代碼如下:

技術分享圖片
//It is made by HolseLee on 24th Feb 2018
//Luogu.org P3197
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int mod=100003;
ll n,m,ans;
inline ll 
get(ll a,ll b) { ll sum=1; while(b){ if(b&1)sum=(sum*a)%mod; a=a*a%mod;b>>=1;} return sum; } int main() { scanf("%lld%lld",&m,&n); ans=((get(m,n)%mod)-(m%mod*get(m-1,n-1)%mod)%mod)%mod; if(ans<0)ans+=mod; printf("%lld",ans); return 0; }
View Code

洛谷P3197 HNOI2008 越獄