http://acm.hdu.edu.cn/showproblem.php?pid=5086
求一段数列里面所有连续和的和,卡精度
规律很明显,数列里面每个数都被加了i*(n+1-i)次
注意下精度即可
#include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <string> #include <queue> #include <map> #include <iostream> #include <algorithm> using namespace std; #define RD(x) scanf("%I64d",&x) #define RD2(x,y) scanf("%d%d",&x,&y) #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z) #define clr0(x) memset(x,0,sizeof(x)) #define clr1(x) memset(x,-1,sizeof(x)) #define eps 1e-9 const double pi = acos(-1.0); typedef long long LL; typedef unsigned long long ULL; const int modo = 1e9 + 7; const int INF = 0x3f3f3f3f; const int inf = 0x3fffffff; const LL _inf = 1e18; const int maxn = 500000,maxm = 10005; #define mod 1000000007 LL s[maxn]; int main() { int _;RD(_); LL n; while(_--){ RD(n); for(int i = 1;i <= n;++i) RD(s[i]); LL ans = 0; for(LL i = 1;i <= n;++i){ LL x = i * s[i] % mod; LL y = x * (n+1-i) % mod; ans = (ans + y) % mod; } printf("%I64d ",ans); } return 0; }