原题链接:https://vjudge.net/problem/1610119/origin
解决思路:
答案是(a1-1)*a2*a3*...*an + a1*(a2-1)*a3*a4*...*an+a1*a2*(a3-1)*a4*...*an+.....+a1*a2*a3*...*(an-1)
在处理的时候,可以开数组分别记录a1*a2*...(ai-1),再开了数组j记录a[i]*a[i+1]*a[i+2]*....*a[n]
AC代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
const ll N = 1e5+20;
const ll mod = 1e9 + 7;
int a[N];
ll b[N];
ll c[N];
int d[N];
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
b[0] = 1;
for(int i=1; i<=n; i++)
{
scanf("%lld", &a[i]);
d[i] = b[i-1] * (a[i] -1) % mod;
b[i] = b[i-1] * a[i] % mod;
}
c[n+1] = 1;
for(int i=n; i>=1; i--)
{
c[i] = c[i+1] * a[i] % mod;
}
ll ans = 0;
for(int i=1; i<=n; i++)
{
ans =( ans + d[i] * c[i+1] )% mod;
}
cout<<ans<<endl;
}
return 0;
}