您的位置:首页 > 其它

lightOJ 1213 Fantasy of a Summation

2015-05-03 09:20 627 查看
题目链接:http://lightoj.com/volume_usersubmissions.php

题意:给你一个求和的循环,让你计算最后的结果是多少?

思路:首先,我们得明确在这个循环里面,a[0]……a[n-1]出现的次数是一样多的,

它大的累加的次数为n^k次方。

看第二个样例:

它有2个数字,3层循环

1、a[0]   a[0]   a[0]

2、a[0]   a[0]   a[1]

3、a[0]   a[1]   a[0]

4、a[0]   a[1]   a[1]

5、a[1]   a[0]   a[0]

6、a[1]   a[0]   a[1]

7、a[1]   a[1]   a[0]

8、a[1]   a[1]   a[1]

在这里面它的大的累加次数为2^3=8次,因为每个数的累加次数一样多的

它每个数的累加次数为(n^k)*k/n=(n^(k-1))*k,

则和就等于(sum(a[i])*(n^(k-1))*k)%mod

#include<stdio.h>
long long pow(int a,int n,int mod){
if(n==0) return 1;
long long t=pow(a,n/2,mod);
t=t%mod;
long long ans=t*t%mod;
if(n%2==1) ans=(ans*(a%mod))%mod;
return ans;
}
int main(){
int T,kase=0;
int a[1005];
scanf("%d",&T);
while(T--){
int n,k,mod;
long long ans=0;
scanf("%d%d%d",&n,&k,&mod);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
ans=(ans+a[i]%mod)%mod;
}
long long t=pow(n,k-1,mod);
ans=((ans*(k%mod)%mod)*t)%mod;
printf("Case %d: %lld\n",++kase,ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lightoj 1213 幂取模