HDU-5086-Revenge of Segment Tree
题目链接
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的更多相关文章
- hdu 5086 Revenge of Segment Tree(BestCoder Round #16)
Revenge of Segment Tree Time Limit: 4000/20 ...
- [ACM] HDU 5086 Revenge of Segment Tree(全部连续区间的和)
Revenge of Segment Tree Problem Description In computer science, a segment tree is a tree data struc ...
- HUD 5086 Revenge of Segment Tree(递推)
http://acm.hdu.edu.cn/showproblem.php?pid=5086 题目大意: 给定一个序列,求这个序列的子序列的和,再求所有子序列总和,这些子序列是连续的.去题目给的第二组 ...
- HDU5086——Revenge of Segment Tree(BestCoder Round #16)
Revenge of Segment Tree Problem DescriptionIn computer science, a segment tree is a tree data struct ...
- hdu5086——Revenge of Segment Tree
Revenge of Segment Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- HDU5086:Revenge of Segment Tree(规律题)
http://acm.hdu.edu.cn/showproblem.php?pid=5086 #include <iostream> #include <stdio.h> #i ...
- BestCoder#16 A-Revenge of Segment Tree
Revenge of Segment Tree Problem Description In computer science, a segment tree is a tree data struc ...
- hdu 5086(递推)
Revenge of Segment Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- 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 ...
- HDU5086Revenge of Segment Tree(数论)
HDU5086Revenge of Segment Tree(数论) pid=5086" target="_blank" style="">题目 ...
随机推荐
- 2015 HDU 计算机学院 院赛 1003 玩骰子
Problem Description Nias与Ains都特别喜欢玩骰子,而且都自以为比对方玩得更溜. 终于有一天,他们决定用骰子来一决高下! 一般的骰子玩法已经不足以体现他们的水平了,于是 ...
- bat 常用命令
基础部分:======================================================================一.基础语法: 1.批处理文件是一个". ...
- 一个人的旅行HDU 2066 floyd
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- hibetnateTemplate常用方法
一.hibetnateTemplate常用方法 1.delete(Object entity) 删除指定的持久化实例在程序中一般先用 Assert.notNull和 Assert.isTrue断 ...
- Android网络开发之Volley--Volley自定义Request
1.自定义一个解析Json的Request,这里使用JackSon框架来解析Json.你也可以自定义一个解析XML的Request,或者使用FastSon来解析Json. 2.我们首先来看一下Stri ...
- extjs入门
http://blog.csdn.net/xiebaochun/article/details/36414437
- Linux下Nginx、PHP、MySQL、Redis开机自启动设置
一.Nginx开机启动设置 1.在/etc/init.d/目录下创建脚本 vi /etc/init.d/nginx 2.更改脚本权限 chmod 775 /etc/init.d/nginx 3.编写脚 ...
- (简单) POJ 1797 Heavy Transportation,Dijkstra。
Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can no ...
- javascript alert,confirm,prompt弹框用法
1. alert是弹出警告框,在文本里面加入\n就可以换行. 2. confirm弹出确认框,会返回布尔值,通过这个值可以判断点击时确认还是取消.true表示点击了确认,false表示点击了取消. 3 ...
- iOS开发——九切片
这个虽然就我来说,感觉它没啥用,但还是放这吧,有时间了把内容补上.