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 }

 

posted @ 2018-07-10 19:35  霜雪千年  阅读(137)  评论(0编辑  收藏  举报