NC17388. 石子阵列
描述
xb有m种石子,每种无限个,Ta想从这些石子中取出n个,并按顺序排列起来,为了好看,相邻的石子不能相同。xb想知道有多少种排列的方法。
输入描述
第一行有两个正整数n,m。
输出描述
第一行一个整数,表示在m种石子中取出n个的排列方案数模1000000007后的值。
示例1
输入:
1 1
输出:
1
示例2
输入:
2 3
输出:
6
示例3
输入:
3 3
输出:
12
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 480K, 提交时间: 2018-08-10 19:12:17
#include<stdio.h> int main() { long long n,m,sum=1; scanf("%lld%lld",&n,&m); sum*=m; for(int i=1;i<=n-1;i++) { sum=sum*(m-1)%1000000007; } printf("%lld",sum); }
C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 592K, 提交时间: 2020-02-19 21:58:09
#include<cstdio> int n,m; int main() { scanf("%d%d",&n,&m); int Ans=m; while(--n) Ans=(long long)Ans*(m-1)%1000000007; printf("%d\n",Ans); return 0; }
Python(2.7.3) 解法, 执行用时: 16ms, 内存消耗: 2924K, 提交时间: 2018-08-12 15:56:18
MOD = 1000000007 n, m = map(int, raw_input().split()) res = m n -= 1 while n: res = res * (m - 1) % MOD n -= 1 print res
Python3(3.5.2) 解法, 执行用时: 29ms, 内存消耗: 3556K, 提交时间: 2018-08-10 19:46:12
n,m = map(int,input().split(' ')) print(m*(m-1)**(n-1)%1000000007)