ACM_开挂的小G
开挂的小G
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
小G寒假在家没网络,闲着没事干又看不下书,就玩起了单机游戏ACM_Game,不过,学计算机的怎么能老玩别人的游戏呢?自己做个?哦不,自己做的要是玩得不开心就会随便改代码啦,这样就没意思了。于是,小G费了点心思就给自己做了个ACM_Game辅助,让自己角色的分数快速增长。有多快呢?程序运行后,第一秒增加1,第2秒增加4,第3秒增加9... 第n秒就增加n^2。小G知道,当n稍微大一点时,自己代码里的int就溢出了,所以他选用了64位的long long。但是,ACM_Game的开发者是个Acmer,他知道正常情况下都有可能被大神刷爆分数,于是他设定了游戏里的分数超过1000000007的,都会取个模1000000007(为什么是这个数呢?因为他喜欢这个大质数)。 现在小G想知道第n秒后他有多少分数,假设一开始分数是0,当然他记性不至于差到需要重复查询同一秒的结果。
Input:
多组数据,大约100000组吧,每组一个n(1<=n<=10000000)
Output:
输出小G当前的分数
Sample Input:
100 1 3
Sample Output:
338350 1 14
解题思路:题目比较简单,数据类型全部为长整型long long,避免数据溢出,水过!
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 const LL maxn=10000005; 5 const LL mod=1000000007; 6 LL s[maxn]={0},n; 7 int main(){ 8 for(LL i=1;i<maxn;++i)s[i]=(s[i-1]+i*i)%mod; 9 while(cin>>n)cout<<s[n]<<endl; 10 return 0; 11 }