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 = 1000000007;

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*q%mod;
		}
		else
		{
			k/=2;
			p = p*p%mod;
		}
	}
	return p*q%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 && h[i]>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;
		}

		for(int i=0;i<n;i++)
		{
			ll tmp;
			if(h[i]>m)
				h[i] = 0;
			else
			{
				tmp = power(n,m);
				tmp = power(tmp,1000000005);
				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