当前位置:网站首页>HDU-5805-NanoApe Loves Sequence(思维题)
HDU-5805-NanoApe Loves Sequence(思维题)
2022-07-28 05:28:00 【__Simon】
NanoApe Loves Sequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others)Total Submission(s): 1087 Accepted Submission(s): 448
In math class, NanoApe picked up sequences once again. He wrote down a sequence with n numbers on the paper and then randomly deleted a number in the sequence. After that, he calculated the maximum absolute value of the difference of each two adjacent remained numbers, denoted as F.
Now he wants to know the expected value of F, if he deleted each number with equal probability.
In each test case, the first line of the input contains an integer n, denoting the length of the original sequence.
The second line of the input contains n integers A1,A2,...,An, denoting the elements of the sequence.
1≤T≤10, 3≤n≤100000, 1≤Ai≤109
In order to prevent using float number, you should print the answer multiplied by n.
1 4 1 2 3 4
6
/**
* @Date: 2016-07-21 10-41-21
* @Project: ACM
* @Last modified time: 2016-08-08 01-53-22
*/
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
#define maxn 100005
int n, m;
long long sum;
long long L[maxn], R[maxn];
long long a[100004];
int main () {
int t;
scanf ("%d", &t);
while (t--) {
scanf ("%d", &n);
for (int i = 1; i <= n; i++) scanf ("%lld", &a[i]);
sum = 0;
//printf("==%d==%d\n",L[1],R[n]);
L[1] = -1, R[n] = -1;//左右两端赋足够小的初值
/**
* 预处理,以将要被删的数为基准,往两边作预处理
*/
for (int i = 2; i <= n; i++) { //往左预处理,使左侧最大差的绝对值为L[i]
L[i] = max (L[i-1], abs (a[i]-a[i-1]));
}
for (int i = n-1; i >= 1; i--) { //往右预处理,使右侧最大差的绝对值为R[i]
R[i] = max (R[i+1], abs (a[i]-a[i+1]));
}
/**
* 当删去两端的数时需特殊处理,取得最大值
* 当删去中间的数时,需考虑删去前该数与左右相邻数的差的绝对值,且产生了一个新的差值。需讨论处理
*/
for (int i = 1; i <= n; i++) {
if (i == 1) sum += R[2]; //当删去第一个数时,需往右考虑,此时R[2]为最大差值的绝对值
else if (i == n) sum += L[n-1];//当删去最后一个数时,需往左考虑,此时L[n-1]是最大差值的绝对值
//删去中间的数时,先比较删去前该数与左右两侧数的差绝对值,取较大值,再与产生的新的差绝对值比较,取最大值
else sum += max (max (L[i-1], R[i+1]), abs (a[i+1]-a[i-1]));
}
printf ("%lld\n", sum);//求和,即期望*n的结果
}
return 0;
}边栏推荐
- ISO 3.0-server three power separation configuration
- 代码整洁之道(二)
- Leetcode brush question diary sword finger offer II 055. binary search tree iterator
- mysql-8.0.17-winx64(附加navicat)手动配置版安装
- Brief analysis of order transaction
- [pta ---- traversal of tree]
- 如何描述一个BUG以及BUG级别的定义、生命周期
- Mongodb quick start
- Everything you don't know about time complexity is here
- [dynamic planning -- the best period for buying and selling stocks series 3]
猜你喜欢

RayMarching实现体积光渲染

Redis cache design and performance optimization

File operation in C language

Water bottle effect production
![[c language] - step by step to achieve minesweeping games](/img/ee/49ddfcd948ccd5c8c9dec3c48c6112.png)
[c language] - step by step to achieve minesweeping games

SSAO By Computer Shader(三)

Project compilation nosuch*** error problem

Leetcode 刷题日记 剑指 Offer II 053. 二叉搜索树中的中序后继

Explain in detail

SSAO by computer shader (III)
随机推荐
InitializingBean接口及示例
[the beginning of self redemption]
Mongodb replica set and partitioned cluster
[C language] string library function introduction and simulation
OJ 1507 deletion problem
[pta ---- traversal of tree]
elastic常用高频命令
File operation in C language
OJ 1284 记数问题
战疫杯--我的账本
Question skimming record - hash table
Analysis of cyclicbarrier source code of AQS
Battle plague Cup -- my account book
Redis cache design and performance optimization
Array solution script
Leetcode skimming diary sword finger offer II 050. sum of downward path nodes
Problem solving for ACM freshmen in Jiangzhong on October 26
Code tidiness (I)
中国剩余定理 个人理解
explain详解