列表

详情


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)

上一题