Lession-1: Don't rush...Keep calm and settle down when you know the logic already.
Lession-2: 1,000,000,007 Is a Magic Number :P and Do Not IGNORE it.
Lession-3: Remember the Rule when working with Modulus Operation, "Apply mod before the result".
If you wait until the result to be computed, answers will be tossed away.
Lession-5: Every problem will have simple solution. Think smart not Bigger.
Lession-6: If you see a Modulus, be ready to solve it. Because modulo randomization always periodical. So Gear up.
Lession-2: 1,000,000,007 Is a Magic Number :P and Do Not IGNORE it.
Lession-3: Remember the Rule when working with Modulus Operation, "Apply mod before the result".
If you wait until the result to be computed, answers will be tossed away.
(a+b)mod m = (a mod m + b mod m) mod m;Lession-4: Arrays are the Most beautiful data structure that you ever seen :D. Do not hesitate to use them to compute nCr and etc.
(a*b)mod m = (a mod m * b mod m) mod m;
Lession-5: Every problem will have simple solution. Think smart not Bigger.
Lession-6: If you see a Modulus, be ready to solve it. Because modulo randomization always periodical. So Gear up.
// ===================================================================================== // Filename: cardGame.cpp // Description: // Created: 02/02/2013 11:44:39 PM // Author: BrOkEN@! // ===================================================================================== #include<iostream> #include<sstream> #include<fstream> #include<string> #include<algorithm> #include<vector> #include<map> #include<queue> #include<stack> #include<set> #include<cstdio> #include<cstdlib> #include<cstddef> #include<cstring> #include<cctype> #include<cmath> #include<cassert> #include<climits> #include<ctime> #define TIMER 1 #define NMAX 10001 #define MOD 1000000007L #define FOR(i,a,b) for( typeof(a) i=(a); i < (b) ; ++i ) using namespace std; int N=0,K=0; long a[NMAX]; long nCr[NMAX][NMAX]; long solve(){ sort(a,a+N); long sum=0L;K--; FOR(i,K,N){ sum+=(a[i]%MOD * nCr[i][K]%MOD)%MOD; } return sum%MOD; } void preCompute(){ FOR(i,0,NMAX){ FOR(j,0,i+1){ if(j==0) nCr[i][j]=1%MOD; else nCr[i][j]=(nCr[i-1][j-1]+nCr[i-1][j])%MOD; } } } int main(){ clock_t t=clock(); preCompute(); int T=0; scanf("%d",&T); for(int t=1;t<=T;t++){ scanf("%d %d",&N,&K); for(int i=0;i<N;i++){scanf("%ld",&a[i]);}; printf("Case #%d: %ld\n",t,solve()); } t=clock()-t; printf ("It took me %ld clicks (%f seconds).\n",t,((float)t)/CLOCKS_PER_SEC); return 0; }
No comments:
Post a Comment