https://ac.nowcoder.com/acm/contest/940/B
题目描述
kotori最近迷上了摆气球的游戏。她一共有n种气球,每种气球有无数个。她要拿出若干个气球摆成一排。
但是,由于气球被施放了魔法,同样种类的气球如果相邻会发生爆炸,因此若两个相邻的气球种类相同被视为不合法的。
kotori想知道,摆成一排m个一共有多少种不同的方案?
由于该数可能过大,只需要输出其对109取模的结果。
输入描述:
输入仅有一行,为两个整数n和m(1≤n,m≤100)
输出描述:
输出一个整数,为方案数对109取模的结果。
示例1
输入
3 2
输出
6
说明
假设3种气球标记为1、2、3,那么共有以下6种方案:[1,2] [1,3] [2,1] [2,3] [3,1] [3,2]。
解题思路:
简单推论题。
a[i]代表长度为i的方案,下一个气球要和当前气球颜色不同,所以a[i+1]=a[i-1]*(n-1)。
#include <stdio.h>
#define N 120
long long a[N];
int main()
{
int n, m, i;
scanf("%d%d", &n, &m);
a[1]=n;
for(i=2; i<=m; i++)
a[i]=(a[i-1]*(n-1))%109;
printf("%lld\n", a[m]);
return 0;
}