2020.10.28 普及组3(团队校网)第三题(数论)

模拟赛3(第三题)

3.区间和的和

在这里插入图片描述

解题思路

假设有4个数,分别是:1,2,3,4
可以有10子区间
【1】 【2】【3】 【4】
【1,2】 【2,3】 【3,4】
【1,2,3】 【2,3,4】
【1,2,3,4】

其中
1出现了4次,2出现了6次,3出现了6次,4出现了4次
……
经过多组数据验证
我们可以求出每个数字出现的次数为两个数相乘

for(long long i=1;i<=n;i++)
long long x=i*(n-i+1);

最后再用这个数乘出现的数,求乘积,再相加

#include<cstdio>
using namespace std;
const long long MOD=1000000007;
long long n,ans,a[100005];
int main()
{
    
    
	scanf("%lld",&n);
	for(long long i=1;i<=n;i++)
	 scanf("%lld",&a[i]);
	for(long long i=1;i<=n;i++)
	{
    
    
		long long x=i%MOD*(n-i+1)%MOD;//出现次数
		a[i]=a[i]%MOD*x%MOD;//乘出现的数
		ans=(ans%MOD+a[i]%MOD)%MOD;//相加
	}
	printf("%lld",ans%MOD);
	return 0;
}

谢谢

猜你喜欢

转载自blog.csdn.net/weixin_45524309/article/details/109363680