链接
题目描述
有n个人依次排队打饭,有m种饭菜可以选择,每个人可能选择其中一种,如果相邻排队的人打的菜一样,那么就会影响彼此吃饭的心情,求这个队伍中有人被影响心情的状态数,对100003取余。
样例输入
2 3
样例输出
6
思路
推柿子
总数减去合法的数
最后得到
a
n
s
=
m
n
−
(
m
−
1
)
n
−
1
m
ans = m^n - (m-1)^{n-1}m
ans=mn−(m−1)n−1m
代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#define ll long long
using namespace std;
int m, n, ans;
int a[10005];
const int mo = 100003;
ll ksm(ll n, ll m)
{
ll re = 1;
while(m)
{
if(m & 1) re = re * n % mo;
n = n * n % mo;
m >>= 1;
}
return re;
}
int main()
{
scanf("%d%d", &n, &m);
ll p = ksm(n, m) % mo;
ll k = ksm(n - 1, m - 1) % mo * n % mo;
printf("%lld", (p - k + mo) % mo);
return 0;
}