突然心血来潮,就想着把当时校赛的题再看看,总觉得就做出来一个有点烦于是大半夜又看了遍
威尔逊的无底胃
时间限制: 1 Sec 内存限制: 128 MB提交: 18 解决: 8
[ 提交][ 状态][ 讨论版]
题目描述
被恶魔传送到荒岛的科学家威尔逊历经艰苦学会了造船并且准备航海,但是在他出海的时候却被恶魔下了诅咒:威尔逊的胃变成了无底洞,每到一个岛屿他都会第一时间将岛上的浆果吃完。
经过一段时间的航海探险,威尔逊发现了一个规律:当他到第x(x>1)个岛屿时,岛上的浆果总数总比第x-1个岛屿多x个(在第一个岛时,威尔逊只发现了一个浆果)。而且每个岛屿上的浆果品种不同,提供的能量也不同,第y个岛屿上的浆果能够提供y乘以岛上浆果总数的能量。
现在威尔逊想知道当他准备离开第n个岛时,他通过吃浆果总共获取了多少能量。这个数有可能很大,对1000000007取模并输出出来。
输入
第一行为一个正整数T(1≤T≤2*10^5),表示有T组数据。
接下来T行,每行有一个正整数n(1≤n≤10^6)含义如题中所述。
输出
输出T行,每行一个整数代表威尔逊获得的总能量。
样例输入
212
样例输出
17
#include<stdio.h>
int a[1000000]={0};
int MOD=1000000007;
int main(void){
int i;
int m;
long long s;
long long sum;
sum = s = 0;
for(i = 1;i <= 1000000;i++) {
s = (s+i)%MOD;
sum = (sum % MOD + s * i % MOD) % MOD;
a[i] = sum;
}
scanf("%d",&m);
while(m--) {
scanf("%d",&i);
printf("%d\n",a[i]);
}
return 0;
}