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;

ll power(ll a, ll k)
{
	if(k==0)return 1;
	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);
	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%=mod;
				}
				h[i]=((sum%mod)*tmp)%mod;
			printf("%lld",h[i]);
			if(i==n-1)
				printf("\n");
			else
				printf(" ");
		}
	}
}

Double click to view unformatted code.


Back to problem 3860