首页 > brz的序列
头像 chsyao
发表于 2020-11-06 22:56:51
简化题意:多次操作使一个数变成旁边两个数的平均值,求序列中数字和最小是多少。可以发现当一段区间变成等差数列后就不能再进行修改了。问题变为选定若干等差数列的首项末项,使数列和最小。又注意到一段区间能变成等差数列当且仅当这段区间除了首项末项以外的数都比变成等差数列后对应位置上的数大。于是可以转化问题,有 展开全文
头像 Deep_Dark_FAntasy♂
发表于 2020-11-07 11:09:36
#include<bits/stdc++.h> using namespace std; const int N = 1e6+7; int a[N]; struct node{ double x, y; }p[N],s[N]; int n; bool cmp(node a, no 展开全文
头像 Meul
发表于 2020-11-07 15:24:39
Solution 对于任意一组我们可以使其中间的数与之构成一个等差数列,利用数形结合,使每个数的,,这在几何学上就是一个凸壳。问题转换为求一个凸壳并计算答案。 凸壳需要满足:对于任意三个点,,由于除法有精度误差,上式转换为乘法。 若不满足上述条件则点需要删除。 最后对维护之后的凸壳进行等差数列求和 展开全文
头像 _LRJ_
发表于 2020-11-07 19:06:26
这题难在联想到二维平面几何问题上。 对于任意一端的l,r如果其中所有的数字都在( a[l],a[r] )之间的话就一定可以把他们变成等差数列(可以画个图想想) 所以需要求凸壳,将序列分为 几段 等差数列来做 CODE: //#pragma GCC&nb 展开全文

等你来战

查看全部