1. 程式人生 > >ACM_開掛的小G

ACM_開掛的小G

現在 類型 game 重復 mes int 什麽 ava ac代碼

開掛的小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 }

ACM_開掛的小G