开挂的小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,当然他记性不至于差到需要重复查询同一秒的结果。
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 }