題目背景:
ZYHW是個神奇的學校,而這個學校的神奇之處就在於它的宿舍...
題目描述:
(爲了節省時間,壓縮了題面)
宿舍有連續編號爲1...N的N個房間,每個房間安排一個同學,有M個班級,每個同學可能是其中一個班級的學生。
如果相鄰房間的同學是班級相同的同班同學,就可能發生一些違規行爲(這裏就不舉例了qwq),求有多少種狀態可能發生違規行爲?
數據輸入:
輸入兩個整數M,N.
數據輸出:
可能違規行爲的狀態數,模100003取餘
輸入樣例:
2 3
輸出樣例:
6
數據範圍:
對於10%的數據M<=20,N<=20
對於100%的數據1<=M<=10^8,1<=N<=10^12
空間限制:128MB 時間限制:1s
樣例提示:
6種狀態爲(000)(001)(011)(100)(110)(111)
題解
一共有m^n種方案
有m*((m-1)^(n-1))種方案不符
所以答案爲m^n-m*((m-1)^(n-1))
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
long long f(long long a,long long k,long long m)
{
long long b=1;
while(k>=1)
{
if(k%2==1) b=a*b%m;
a=a*a%m;
k=k/2;
}
return b;
}
int main(){
long long n,m;
cin>>m>>n;
long long cnt=0;
long long a=0,x=0;
a=f(m-1,n-1,100003);
x=f(m,n,100003);
a=(a*m)%100003;
if(x-a>0)
cout<<(x-a);
else
cout<<(x-a)+100003;
}