昨天晚上才想起来有这么个比赛,上去挑了一道自己比较擅长的组合数学的题做了一下,话说微软的题质量果然高,这道题大数据我是没想通过,太闹心了,第一次能过资格赛就得了,然后分析这道题,以小数据为准,两种情况,1.三个礼物价值相等 2.三个礼物价值各不相等,第一种情况从1^3加到n^3就行了,每次相加去一次模,第二种情况用递推,我也不知道怎么说,代码如下:
#include <iostream>
using namespace std;
const int fac=1000000007;
int main()
{
int t;
cin>>t;
for(int c=1;c<=t;c++){
long long n,sum1=0,sum2=0;
cin>>n;
for(int i=1;i<=n;i++) {sum1+=i*i*i;sum1%=fac;}
if(n>=3){
long long s1=6,s2=2,s3=1;
for(int i=1;i<=n-3;i++){
s3=s3+i+1;
s2=(s2+(i+2)*s3)%fac;
s1=(s1+(i+3)*s2)%fac;
}
sum2=(6*s1)%fac;
}
cout<<"Case "<<c<<": "<<(sum1+sum2)%fac<<endl;
}
return 0;
}