现在的位置: 首页 > 综合 > 正文

BC#16 A

2017年11月21日 ⁄ 综合 ⁄ 共 673字 ⁄ 字号 评论关闭

QAQ 这么简单的一道题。。。。我个傻蛋

题意是给你一串数列,叫你求所有子串的和。题目涉及线段是,但是跟线段树半点关系都没有啊喂。

就统计每个数在子串中出现的次数就好,我是有点懒,直接先模拟找规律,然后套进去的。刚开始一直WA,后来发现是数组范围开大了,改完之后就A了= =

然后取模很重要啊,每次都要小心会不会暴啊

#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
#define maxn 447010
#define mod 1000000007
#define ll __int64
ll num[maxn];

int main()
{
    int T;
    //freopen("ex.txt","r",stdin);
    cin>>T;
    while(T--)
    {
        ll n;
        cin>>n;
        ll sum=0;
        ll i,j,k;
        for(i=1;i<=n;i++) scanf("%I64d",&num[i]);
        if(n==1) {printf("%I64d\n",num[1]);continue;}
        //sum+=num[1]*n+num[n]*n;
        if(sum>=mod) sum%=mod;
        for(i=n,j=1;i>=1;i--,j++)
        {
            sum+=((i*j)%mod*(num[j]))%mod;    ///注意这里取模处理,刚刚把(i*j)后面的mod去掉了就WA了
            if(sum>=mod) sum%=mod;
            //printf("%d\n",i*j);

        }
        printf("%I64d\n",sum);
    }
    return 0;
}
【上篇】
【下篇】

抱歉!评论已关闭.