Fantasy of a Summation
题意
给你n,K,mod,让你计算上面代码的结果
分析
这题很明显不能直接暴力,而要从每个元素贡献方面着手,也就是算一下每个元素会被加多少次。
举个例子
以第二个样例为例:
2 3 35000
1 2
1 2 1 2 1 2
第二排的1,上面共有2条路径,下面有两条路径。所以就是条路径,转换成公式就是
所以总和就是:
AC 代码
#include <iostream> #include <algorithm> #include <stdio.h> using namespace std; typedef long long ll; ll T; ll n,k,mod; ll arr[1010]; ll ksm(ll a,ll b){ ll res = 1; while(b){ if(b&1) res = res*a%mod; a = a*a%mod; b>>=1; } return res; } ll solve(){ ll res = 0; for(ll i = 0;i<n;i++){ res = (res+arr[i]*ksm(n,k-1)%mod)%mod; } res = res*k%mod; return res; } int main(){ cin>>T; int kase = 0; while(T--){ scanf("%lld %lld %lld",&n,&k,&mod); for(int i = 0;i<n;i++) scanf("%lld",&arr[i]); ll res = solve(); printf("Case %d: %lld\n",++kase,res); } return 0; }