首页 > 代码库 > E - Fantasy of a Summation LightOJ1213

E - Fantasy of a Summation LightOJ1213

E - Fantasy of a Summation

Time Limit: 2000/1000 MS (Java/Others)      Memory Limit: 128000/64000 KB (Java/Others)
Submit Status

Problem Description

If you think codes, eat codes then sometimes you may get stressed. In your dreams you may see huge codes, as I have seen once. Here is the code I saw in my dream.

 1 #include <stdio.h> 2   3 int cases, caseno; 4 int n, K, MOD; 5 int A[1001]; 6   7 int main() { 8     scanf("%d", &cases); 9     while( cases-- ) {10         scanf("%d %d %d", &n, &K, &MOD);11  12         int i, i1, i2, i3, ... , iK;13  14         for( i = 0; i < n; i++ ) scanf("%d", &A[i]);15  16         int res = 0;17         for( i1 = 0; i1 < n; i1++ ) {18             for( i2 = 0; i2 < n; i2++ ) {19                 for( i3 = 0; i3 < n; i3++ ) {20                     ...21                     for( iK = 0; iK < n; iK++ ) {22                         res = ( res + A[i1] + A[i2] + ... + A[iK] ) % MOD;23                     }24                     ...25                 }26             }27         }28         printf("Case %d: %d\n", ++caseno, res);29     }30     return 0;31 }

 

Actually the code was about: ‘You are given three integers n, K, MOD and n integers: A0, A1, A2 ... An-1, you have to write K nested loops and calculate the summation of all Ai where i is the value of any nested loop variable.‘

Input

Input starts with an integer T (≤ 100), denoting the number of test cases.

Each case starts with three integers: n (1 ≤ n ≤ 1000), K (1 ≤ K < 231), MOD (1 ≤ MOD ≤ 35000). The next line contains n non-negative integers denoting A0, A1, A2 ... An-1. Each of these integers will be fit into a 32 bit signed integer.

 

Output

For each case, print the case number and result of the code.

Sample Input

23 1 350001 2 32 3 350001 2

Sample Output

Case 1: 6Case 2: 36

技术分享
 1 #include <stdio.h> 2 #include <queue> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <vector> 7 #include <map> 8 #include <set> 9 #include <ctime>10 #include <cmath>11 #include <cctype>12 using namespace std;13 typedef long long LL;14 const int N=1e5+10;15 const int INF=0x3f3f3f3f;16 int cas=1,T;17 int n,k,mod;18 int quick_mod(int t,int n)19 {20     int ans=1;21     while(n)22     {23         if(n&1) ans=ans*t%mod;24         t=t*t%mod;25         n>>=1;26     }27     return ans;28 }29 int main()30 {31     //freopen("1.in","w",stdout);32 //    freopen("1.in","r",stdin);33 //    freopen("1.out","w",stdout);34     scanf("%d",&T);35     while(T--)36     {37         scanf("%d%d%d",&n,&k,&mod);38         int ans=0;39         for(int i=0,x;i<n;i++)40         {41             scanf("%d",&x);42             ans+=x%mod;43         }44         ans%=mod;45         ans=k%mod * quick_mod(n,k-1) % mod *ans %mod;46         printf("Case %d: %d\n",cas++,ans);47     }48     //printf("time=%.3lf\n",(double)clock()/CLOCKS_PER_SEC);49     return 0;50 }
solve.cpp

 

题解:

仔细研究一下代码会发现只是一条公式:k*n^(k-1)*(a1+a2+...+an)
然后快速幂即可,注意不要被循环绕晕



E - Fantasy of a Summation LightOJ1213