牛客练习赛24 A 石子阵列

链接:https://www.nowcoder.com/acm/contest/157/A
来源:牛客网

题目描述




  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种石子中取出n个,要求相邻两个石子不能相同,求总共有多少种排列方法

思路:若第一个是m种,第二个就是(m-1)种,因为相邻两个不同,第三个又是(m-1),以此类推…所以是m*(m-1)^(n-1)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
 
int main()
{
    long long  n,m;
    while(scanf("%lld%lld",&n,&m)!=EOF)
    {
        long long  ans=0;
        if(m==1&&n==1)
            ans=1;
        else if(m==1&&n!=1)
            ans=0;
        else
        {
            ans=m;
            for(int i=2;i<=n;i++)
            {
                ans=ans*(m-1)%1000000007;
            }
        }
        printf("%lld\n",ans);
    }
    return 0;
}
AC Code

 

posted @ 2018-08-14 11:00  子诚-  阅读(137)  评论(0编辑  收藏  举报