View Code of Problem 3860

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;

typedef long long ll;
ll n, m;
ll h[1005];
const ll mod = 1e9+7;
int cmb[1005][1005];

void getc()
{
    for(int i=0;i<1005;i++)
    {
        cmb[i][0] = cmb[i][i] = 1;
        for(int j = 1;j<i;j++)
        {
            cmb[i][j] = cmb[i-1][j]+cmb[i-1][j-1];
            cmb[i][j]%=mod;
        }
    }
}



ll power(ll a, ll k)
{
	ll p,q;
	p = a%mod;
	q = 1;
	while(k!=1)
	{
		if(k & 1)
		{
			k--;
			q = ((p%mod)*(q%mod))%mod;
		}
		else
		{
			k/=2;
			p = ((p%mod)*(p%mod))%mod;
		}
	}
	return ((p%mod)*(q%mod))%mod;
}



int main()
{
	int t;
	scanf("%d",&t);
	getc();
	while(t--)
	{
		scanf("%lld%lld",&n,&m);
		for(int i=0;i<n;i++)
		{
			scanf("%lld",&h[i]);
			ll tmp;
			tmp = h[i]/6;
			if(h[i]%6>0)tmp++;
			h[i] = tmp;
		}

		ll tmp2[1005],tmp3[1005];
		tmp2[0] =tmp3[m] = 1;
		for(int j = 1;j<=m;j++)
		{
			//tmp2[j] = (tmp2[j-1]*(m-j+1)/j)%mod;
			tmp3[m-j] = (tmp3[m-j+1]*(n-1))%mod;
		}
		ll tmp;
        tmp = power(n,m);
        tmp = power(tmp,1e9+5);
		for(int i=0;i<n;i++)
		{
            ll sum = 0;
            for(int j = m;j>=h[i];j--)
            {
                //sum+=(tmp2[j]*tmp3[j])%mod;
                sum+=(tmp3[j]*cmb[m][j])%mod;
                sum%=mod;
            }
            h[i]=(sum*tmp)%mod;
			printf("%lld",h[i]);
			if(i==n-1)
				printf("\n");
			else
				printf(" ");
		}
	}
}

Double click to view unformatted code.


Back to problem 3860