BC#16 A

来源:互联网 发布:mac chrome插件下载 编辑:程序博客网 时间:2024/06/01 10:03

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

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

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

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

#include <stdio.h>#include <iostream>#include <string.h>using namespace std;#define maxn 447010#define mod 1000000007#define ll __int64ll 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;}


0 0
原创粉丝点击