2722 - 二货分西瓜

通过次数

0

提交次数

0

时间限制 : 2 秒 内存限制 : 128 MB

n(2<=n<=10^6)个二货围成一个圈分西瓜,并且这群二货都特别喜欢自己是独特的,所以他们都需要他们的西瓜跟他们所能看到的人是不同的,但是呢,因为是二货,所以只能看到自己旁边两人。 现在让你来发西瓜,西瓜的大小有m(1<=m<=10^6)种,请问有多少种分法。

题目输入

多组输入,每组输入一个n和m。

题目输出

每组输出一个数表示有多少种分发,因为数字可能过大所以对11080302取余

输入/输出样例

输入格式

4 3

输出格式

18

C语言解答

#include <stdio.h>
#include <string.h>
const long long mod=11080302;
long long a[1000005];
int main()
{
	long long n,m;
	while(scanf("%lld%lld",&n,&m)!=EOF)
	{
		a[0]=0;
		a[1]=m-1;
		for(int i=2;i<n;i++)
			a[i]=((m-1)*a[i-2]+(m-2)*a[i-1])%mod;
		printf("%lld\n",m*a[n-1]%mod);
	}
	return 0;
}

C++解答

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#define mod 11080302
using namespace std;
long long  a[1000005];
int main()
{
    //freopen("E input.txt","r",stdin);
    //freopen("E output.txt","w",stdout);
    long long n,m;
    while(cin>>n>>m)
    {
        a[1]=0;
        a[2]=(m%mod)*((m-1)%mod)%mod;
        for(int i=3;i<=n;i++)
        {
            a[i]=(m-2)*a[i-1]+(m-1)*a[i-2];
            a[i]%=mod;
        }
        cout<<a[n]<<endl;
    }
}