P1419 寻找段落】的更多相关文章

题目描述 给定一个长度为n的序列a_i,定义a[i]为第i个元素的价值.现在需要找出序列中最有价值的“段落”.段落的定义是长度在[S,T]之间的连续序列.最有价值段落是指平均值最大的段落, 段落的平均值=段落总价值/段落长度. 输入输出格式 输入格式: 第一行一个整数n,表示序列长度. 第二行两个整数S和T,表示段落长度的范围,在[S,T]之间. 第三行到第n+2行,每行一个整数表示每个元素的价值指数. 输出格式: 一个实数,保留3位小数,表示最优段落的平均值. 输入输出样例 输入样例#1: 3…
https://www.luogu.org/problem/show?pid=1419 题目描述 给定一个长度为n的序列a_i,定义a[i]为第i个元素的价值.现在需要找出序列中最有价值的“段落”.段落的定义是长度在[S,T]之间的连续序列.最有价值段落是指平均值最大的段落, 段落的平均值=段落总价值/段落长度. 输入输出格式 输入格式: 第一行一个整数n,表示序列长度. 第二行两个整数S和T,表示段落长度的范围,在[S,T]之间. 第三行到第n+2行,每行一个整数表示每个元素的价值指数. 输出…
一道单调队列的好题 传送门:>Here< 题意:求一个连续子段,其长度在\([S,T]\)之间,使其平均值最大.保留三位小数 解题思路 考虑二分答案,转化为判定问题.设当前二分到\(k\),则一段满足要求的子序列一定满足:\[\dfrac{a[l]+...+a[r]}{r-l+1} \geq k\]于是变形可得\[a[l]+...+a[r] \geq k*(r-l+1)\]也就等同于\[(a[l]-k)+...+(a[r]-k) \geq 0\]于是我们只需要找出一段进行如上处理的序列中,长度…
题目链接 不知为何状态突然奇差无比,按说这题本来应该是水题的,但不仅不会做,还比着题解爆零五次 二分平均值(想到了),单调队列维护最大区间和(想到了但是不会,???为什么我不会???) #include<cstdio> #include<algorithm> #include<cctype> #include<cstring> #include<cstdlib> #define maxn 200020 #define eps 1e-6 using…
题目 单调队列+前缀和 #include <bits/stdc++.h> #define N 101001 using namespace std; int n, s, t; int data[N]; double ans, temp[N], sum[N], l = -10000, r = 10000; bool check(double a) { deque <int> q; memset(sum, 0, sizeof(sum)); for (int i = 1; i <=…
题目描述 给定一个长度为n的序列a_i,定义a[i]为第i个元素的价值.现在需要找出序列中最有价值的“段落”.段落的定义是长度在[S,T]之间的连续序列.最有价值段落是指平均值最大的段落, 段落的平均值=段落总价值/段落长度. 输入输出格式 输入格式: 第一行一个整数n,表示序列长度. 第二行两个整数S和T,表示段落长度的范围,在[S,T]之间. 第三行到第n+2行,每行一个整数表示每个元素的价值指数. 输出格式: 一个实数,保留3位小数,表示最优段落的平均值. 输入输出样例 输入样例#1: 复…
题目链接 开始还以为是尺取.发现行不通. 一看标签二分答案,恍然大悟. 二分一个\(mid\)(实数),把数列里每个数减去\(mid\),然后求前缀和,在用单调队列维护\(sum[i-t\text{~}i-s]\)的最小值,用\(sum[i]\)减去它,如果大于等于\(0\)就说明\(mid\)可行. #include <cstdio> #include <algorithm> using namespace std; #define INF 2147483647 const in…
前言 鉴于这题的题解质量(连LaTeX公式都没有),我决定再发一篇详细的题解,不仅方便大家,还可以作为我学习单调队列优化dp的小结(尽管这题不是dp). 分析 题目要求求一个最大的实数\(x\),使得某长度在\([S,T]\)之间的区间\([L,R]\)满足 \[\frac{\sum_{i=L}^{R}a_i}{R-L+1}=x\] 即 \[\sum_{i=L}^{R}a_i=x*(R-L+1)\] 由于答案满足单调性,所以可以二分\(x\),转化为判断问题,即判断 \[\sum_{i=L}^{…
题意 给定一个长度为n的序列a1~an,从中选取一段长度在s到t之间的连续一段使其平均值最大.(n<=100000) 题解 二分答案平均值. judge时把每一个a[i]-mid得到b[i] 在b[i]中找到一段合法的串使其权值和最大. 当最大权值和大于等于0时则mid上移. 求最大权值和用单调队列就行.(预处理b[i]的前缀和sum[i],队列中记录当前位置可选区间的最小的sum[i]) #include <iostream> #include <cstdio> #incl…
单调队列存坐标 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++ a) #define nR(a,b,c) for(register int a = (b); a >= (c); --…