牛客网:石子阵列
链接:https://www.nowcoder.com/acm/contest/157/A
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
xb有m种石子,每种无限个,Ta想从这些石子中取出n个,并按顺序排列起来,为了好看,相邻的石子不能相同。xb想知道有多少种排列的方法。
输入描述:
第一行有两个正整数n,m。
输出描述:
第一行一个整数,表示在m种石子中取出n个的排列方案数模1000000007后的值。
示例1
输入
1 1
输出
1
示例2
输入
2 3
输出
6
示例3
输入
3 3
输出
12
备注:
链接:https://www.nowcoder.com/acm/contest/157/A 来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
xb有m种石子,每种无限个,Ta想从这些石子中取出n个,并按顺序排列起来,为了好看,相邻的石子不能相同。xb想知道有多少种排列的方法。
输入描述:
第一行有两个正整数n,m。
输出描述:
第一行一个整数,表示在m种石子中取出n个的排列方案数模1000000007后的值。
示例1
输入
1 1
输出
1
示例2
输入
2 3
输出
6
示例3
输入
3 3
输出
12
备注:
对于100%的测试数据: 1 ≤ n, m ≤ 1000 数据量较大,注意使用更快的输入输出方式。
在选石子的时候只要注意后一个和前一个不同就可以,因此每一个石子相对于前面一颗石子有m-1种可能,而第一个是不限种类的,所以有m种可能。
#include<stdio.h>
int main()
{
long long m,n,ans;
while(scanf("%lld%lld",&n,&m)!=EOF)
{
ans=m;
n--;
while(n--)
ans=(ans*(m-1))%1000000007;
printf("%lld\n",ans);
}
return 0;
}