题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=5086

这题太不应该了,比赛时没做出来,本来呢,以现在的水平这题是能够做出来的,可就是题目理解错了,按题目的意四的话很好做,直接找规律,

题意

给定一个序列,求这个序列的子序列的和,再求所有子序列总和,这些子序列是连续的。

例如

1 2 4

{1 }    { 2 }     { 4 }    { 1  2 }   {2  4}  {1  2  4}

1+2+4+1+2+2+4+1+2+4=23

找规律

我们假设n等于5。序列为1、2、3、4、5。然后我们将它们如下排列,每行表示一个序列

1

2
1 2

3
2 3
1 2 3

4
3 4
2 3 4
1 2 3 4

5
4 5
3 4 5
2 3 4 5
1 2 3 4 5

我们从中会发现序列中的a[i](表示序列第i个数),不管在那堆里面,a[i]有i个。总共有几个a[i]*i呢,可以看出有n-i+1个。
所以推出公式为∑a[i]*i*(n-i+1)就是正确的答案了

为什么我们要推公式,是因为我们暴力做的话时间复杂度是O(n^2),根据题目给的数据,肯定会超时。

推出的公式的时间复杂度是O(n),题目给的数据,是不会超时的。

代码

#include<stdio.h>

const int mod=1000000007;

int main(void)
{
int t;
__int64 n,num,sum,i;
scanf("%d",&t);
while(t--)
{
sum=0;
scanf("%I64d",&n);
for(i=1;i<=n;i++)
{
scanf("%I64d",&num);
sum=(sum+(num*i)%mod*(n-i+1)%mod)%mod;
}
printf("%I64d\n",sum);
}
return 0;
}

错误的地方在我理解的是:a[i]数的连续和

如按我的理解

1 2 4

的结果是

{1}  {2}  {4}  {1 2}

答案是10 而不是23 也不是那么好做了。

HDU-5086-Revenge of Segment Tree的更多相关文章

  1. hdu 5086 Revenge of Segment Tree(BestCoder Round #16)

    Revenge of Segment Tree                                                          Time Limit: 4000/20 ...

  2. [ACM] HDU 5086 Revenge of Segment Tree(全部连续区间的和)

    Revenge of Segment Tree Problem Description In computer science, a segment tree is a tree data struc ...

  3. HUD 5086 Revenge of Segment Tree(递推)

    http://acm.hdu.edu.cn/showproblem.php?pid=5086 题目大意: 给定一个序列,求这个序列的子序列的和,再求所有子序列总和,这些子序列是连续的.去题目给的第二组 ...

  4. HDU5086——Revenge of Segment Tree(BestCoder Round #16)

    Revenge of Segment Tree Problem DescriptionIn computer science, a segment tree is a tree data struct ...

  5. hdu5086——Revenge of Segment Tree

    Revenge of Segment Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  6. HDU5086:Revenge of Segment Tree(规律题)

    http://acm.hdu.edu.cn/showproblem.php?pid=5086 #include <iostream> #include <stdio.h> #i ...

  7. BestCoder#16 A-Revenge of Segment Tree

    Revenge of Segment Tree Problem Description In computer science, a segment tree is a tree data struc ...

  8. hdu 5086(递推)

    Revenge of Segment Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  9. HDU 1542/POJ 1151 Atlantis (scaning line + segment tree)

    A template of discretization + scaning line + segment tree. It's easy to understand, but a little di ...

  10. HDU5086Revenge of Segment Tree(数论)

    HDU5086Revenge of Segment Tree(数论) pid=5086" target="_blank" style="">题目 ...

随机推荐

  1. Python3基础 Python的函数都有返回值 无指定返回值的函数 返回NONE对象

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  2. 比较好的前端方法库及一些vue如何引入静态文件

    https://select2.github.io/examples.html   select2 自动搜索带select选择 ## 表单提交 https://github.com/marioizqu ...

  3. IWorkspaceFactory接口

    When To Use Use IWorkspaceFactory when you need to create a new workspace, connect to an existing wo ...

  4. javascript 数组合并

    javascript 中两个数组合并,当然可以遍历其中一个数组,通过push()方法将元素插入到另一个数组中. 另外,也可以使用内置的方法(javascript Array 对象上就具有的方法,或许比 ...

  5. gcd timer

    //0.创建队列 dispatch_queue_t queue = dispatch_get_global_queue(, ); NSLog(@"%s",__func__); // ...

  6. Windows Azure Storage Client Library 2.0 入门

    入门连接如下: http://gauravmantri.com/2012/11/17/storage-client-library-2-0-migrating-table-storage-code/

  7. openlayers画图形返回范围

    //画图形返回圖形的范围 var polygonLayer = new OpenLayers.Layer.Vector("选择范围"); var drawControls = ne ...

  8. 控制流之continue

    continue语句continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后 继续 进行下一轮循环.使用continue语句~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  9. Unity中的CG编写Shader系列(Blend)

    1.不透明度 当我们要将两个半透的纹理贴图到一个材质球上的时候就遇到混合的问题,由于前面的知识我们已经知道了片段着色器以及后面的环节的主要工作是输出颜色与深度到帧缓存中,所以两个纹理在每个像素上的颜色 ...

  10. mysql优化----第一篇:综述

    一 系统层面  查看CPU和IO状态,确定瓶颈.增 更换设备 二   数据库层面 1 参数优化. 参考文章<mysql性能优化----调整参数>增大数据库内存缓存等设置. 参考 http: ...