题目背景:
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;
}