AGC044E Pandom Pawn(期望+凸包)

最开始我们先旋转一下这张桌子,使得 A1=An+1=max⁡{Ai}A_1=A_{n+1}=\max\{A_i\}A1=An+1=max{Ai}

这是非常有效的,因为我们把环就变成链,只要到达了链的任意一端 1/n+11/n+11/n+1 就肯定会结束游戏。

定义 Ei:E_i:Ei:iii 开始游戏,运用最优策略,结束游戏的期望收益。

显然,E1=A1,En+1=An+1,∀1≤i≤nEi=max⁡(Ai,Ei−1+Ei+12−Bi)E_1=A_1,E_{n+1}=A_{n+1},\forall_{1\le i\le n}E_{i}=\max\Big(A_{i},\frac{E_{i-1}+E_{i+1}}2-B_i\Big)E1=A1,En+1=An+1,1inEi=max(Ai,2Ei1+Ei+1Bi)


简化问题,假设没有这个 BiB_iBi 存在。

iii 看成 (i,Ai)(i,A_i)(i,Ai) 放到二维平面内,则答案 EiE_iEi 就是 iii 为横坐标时在这些点维护出的凸壳上的纵坐标。

画画图就知道了。

维护凸壳以及求解答案是可以在线性时间内完成的。


考虑将当前复杂问题往简单问题上靠拢。

能否构造出一个新形式的 FiF_iFiBiB_iBi 抵消掉,即 Fi=max⁡(Gi,Fi−1+Fi+12)F_i=\max\Big(G_i,\frac{F_{i-1}+F_{i+1}}2\Big)Fi=max(Gi,2Fi1+Fi+1),再通过 FiF_iFi 反推回 EiE_iEi

Ei−Ci=max⁡(Ai−Ci,Ei−1+Ei+12−Ci−Bi)⇕E_i-C_i=\max\Big(A_i-C_i,\frac{E_{i-1}+E_{i+1}}2-C_i-B_i\Big)\\ \UpdownarrowEiCi=max(AiCi,2Ei1+Ei+1CiBi)Ei−Ci=max⁡(Ai−Ci,Ei−1−Ci−1+Ei+1−Ci+12+Ci−1+Ci+12−Ci−Bi)E_i-C_i=\max\Big(A_i-C_i,\frac{E_{i-1}-C_{i-1}+E_{i+1}-C_{i+1}}2+\frac{C_{i-1}+C_{i+1}}2-C_i-B_i\Big)EiCi=max(AiCi,2Ei1Ci1+Ei+1Ci+1+2Ci1+Ci+1CiBi)

(因为 BiB_iBi 是常量,前面的系数是不带 iii 的任一次方的,所以我们构造的时候应该先考虑不出现带 iii 系数的形式)

发现只要令 ∀1≤i≤nCi−1+Ci+12−Ci−Bi=0\forall_{1\le i\le n}\frac{C_{i-1}+C_{i+1}}2-C_i-B_i=01in2Ci1+Ci+1CiBi=0 就能达到目的。

⇒Ci−Ci−1+2Bi=Ci+1−Ci\Rightarrow C_i-C_{i-1}+2B_i=C_{i+1}-C_iCiCi1+2Bi=Ci+1CiC2=C1=0C_2=C_1=0C2=C1=0,这样 CCC 就递推出来了。

Fi=Ei−CiF_i=E_i-C_iFi=EiCi,则 Fi=max⁡(Ai−Ci,Fi−1+Fi+12)F_i=\max\Big(A_i-C_i,\frac{F_{i-1}+F_{i+1}}2\Big)Fi=max(AiCi,2Fi1+Fi+1),以 (i,Fi)(i,F_i)(i,Fi) 构造凸壳即可线性求解。

先维护出凸壳,后再挨个求纵坐标。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define maxn 200005
int A[maxn], B[maxn], C[maxn], s[maxn];
double ans;
int n;signed main() {scanf( "%lld", &n );for( int i = 1;i <= n;i ++ ) scanf( "%lld", &A[i] );for( int i = 1;i <= n;i ++ ) scanf( "%lld", &B[i] );int id = max_element( A + 1, A + n + 1 ) - A;rotate( A + 1, A + id, A + n + 1 );rotate( B + 1, B + id, B + n + 1 );A[n + 1] = A[1], B[n + 1] = B[1];for( int i = 3;i <= n + 1;i ++ ) C[i] = ( B[i - 1] + C[i - 1] << 1 ) - C[i - 2];for( int i = 1;i <= n + 1;i ++ ) A[i] -= C[i];int top = 0;s[++ top] = 1;for( int i = 2;i <= n + 1;i ++ ) {while( top and (A[i] - A[s[top]]) * (s[top] - s[top - 1]) > (A[s[top]] - A[s[top - 1]]) * (i - s[top]) ) top --;/*( A[i]-A[s[top]] ) / ( i-s[top] ) k1 of new line( A[s[top]]-A[s[top-1]] ) / ( s[top]-s[top-1]) k1 of latest lineif k1>k2 throw k2*/s[++ top] = i;}double ans = 0;top = 0;for( int i = 1;i <= n;i ++ ) {if( s[top + 1] == i ) top ++;ans += (A[s[top + 1]] - A[s[top]]) * 1.0 / (s[top + 1] - s[top] ) * (i - s[top]) + A[s[top]];//将凸包上的一条边抽变成从原点开始计算ans += C[i];}printf( "%.12Lf\n", ans / n );return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core 容器化调查

前几天在微信朋友圈做了一个简单的调查&#xff0c;参与人数有500人&#xff0c;调查结果如下&#xff1a;使用K8S的比例非常类似于2017年初我在公众号里针对.NET Core的使用情况的比例。.NET Core是针对云原生应用开发而重新设计的一个平台&#xff0c;.NET Core借鉴了.NET Fr…

P4735 最大异或和

P4735 最大异或和 题意&#xff1a; 一个非负序列a&#xff0c;初始长度为n&#xff0c;有两种操作&#xff1a; A x&#xff0c;在序列中添加x&#xff0c;n加一Q l r x,询问操作&#xff0c;询问一个位置p&#xff0c;p满足l<p<r,使得p到位置n的的异或和与x的异或值…

[学习笔记] 单位根反演

单位根反演 [k∣n]1k∑i0k−1ωkin[k\mid n]\frac 1k\sum_{i0}^{k-1}\omega_k^{in}[k∣n]k1​∑i0k−1​ωkin​ kkk 次单位根是 kkk 次幂为 111 的复数解 wkw_kwk​。利用单位圆和单位根的关系很容易证明。 k∣nk\mid nk∣n 显然 ωkin\omega_k^{in}ωkin​&#xff0c;相当于…

NET Core微服务之路:再谈分布式系统中一致性问题分析

前言一致性&#xff1a;很多时候表现在IT系统中&#xff0c;通常在分布式系统中&#xff0c;必须&#xff08;或最终&#xff09;为多个节点的数据保持一致。世间万物&#xff0c;也有存在相同的特征或相似&#xff0c;比如儿时的双胞胎&#xff0c;一批工厂流水线的产品&#…

P4592 [TJOI2018]异或

P4592 [TJOI2018]异或 题意&#xff1a; 现在有一颗以 1 为根节点的由 n 个节点组成的树&#xff0c;节点从 1 至 n 编号。树上每个节点上都有一个权值 vi。现在有 q 次操作&#xff0c;操作如下&#xff1a; 1 x z&#xff1a;查询节点 x 的子树中的节点权值与 z 异或结果的…

[HAOI2018] 染色(二项式反演+NTT)

洛谷链接 显然颜色数量不会超过 lim⁡min⁡(m,ns)\lim\min(m,\frac ns)limmin(m,sn​) fi:f_i:fi​: 至少有 iii 种颜色恰好出现了 sss 次的方案数。 则 fi(mi)⋅n!(s!)i(n−is)!⋅(m−i)n−isf_i\binom mi\frac{n!}{(s!)^i(n-is)!}(m-i)^{n-is}fi​(im​)⋅(s!)i(n−is)!n!​…

使用 Nexus3镜像搭设私有仓库(Bower 、Docker、Maven、npm、NuGet、Yum、PyPI)

Docker - 使用 Nexus3 搭设私有 NuGet 仓库Nexus 默认帐号Repositories上传组件包(Package)Repositories 说明准备 Package上传 Package使用 Package拉取 Nexus 镜像运行 NexusNuGetNexus 私有仓库前言说明安装Nexus NuGet 仓库简单使用总结前言NuGetNuget 是免费、开源的包管理…

P3293 [SCOI2016]美味

P3293 [SCOI2016]美味 题意&#xff1a; 有n个数组a&#xff0c;现在有m个询问&#xff0c;每次给出一个b和x&#xff0c;问b xor (a[i] x)的最大值是多少&#xff1f; 题解&#xff1a; 不难看出01Trie的题目 我们设ansa[i]x,我们想要b xor ans的最大值&#xff0c;这个很…

[HNOIAHOI2018] 转盘(线段树维护单调栈)

problem 洛谷链接 solution 结论&#xff1a;最优方案中一定有一种是全程不停的。 断环成链&#xff0c;接一个 [1,n][1,n][1,n] 在后面形成 2n2n2n 的序列&#xff0c;同时将时间戳逆过来。 转化成&#xff1a;在 ttt 时刻从某个位置 i∈[n,2n)i\in[n,2n)i∈[n,2n) 开始往…

P2446 [SDOI2010]大陆争霸

P2446 [SDOI2010]大陆争霸 题意&#xff1a; n个点&#xff0c;m个边&#xff0c;wi为每个边的边权&#xff0c;对于每个点i&#xff0c;其被l个点保护着&#xff0c;也就是如果保护其的点没有被破坏&#xff0c;点i无法被破坏(也无法经过其前往其他点)。现在从1出兵(无限数量…

EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽

DbContextPool 是 ASP.NET Core 2.1 引入的新特性&#xff0c;可以节省创建 DbContext 实例的开销&#xff0c;但没有想到其中藏着一个小坑。最近有一个 ASP.NET Core 项目持续运行一段时间后日志中就会出现数据库连接池达到最大连接数限制的错误&#xff1a;System.InvalidOpe…

AtCoder4505 [AGC029F] Construction of a tree(二分图+网络流+dfs+构造)

problem 洛谷链接 solution 考虑 Ω{E1,...,En−1}\Omega\{E_1,...,E_{n-1}\}Ω{E1​,...,En−1​} 的一个子集 SSS&#xff0c;记 f(S){u∣u∈Ei∈S}f(S)\{u\mid u\in E_i\in S\}f(S){u∣u∈Ei​∈S}。 显然当 S≠∅∧∣f(S)∣≤∣S∣S\ne\empty\wedge\big|f(S)\big|\le |…

P2447 [SDOI2010]外星千足虫

P2447 [SDOI2010]外星千足虫 题意&#xff1a; 有n个未知数 给你一个m行n1列的式子&#xff0c;对于每行&#xff0c;1到n列为这个n个未知数的系数&#xff0c;第n1列为该行式子的和mod2&#xff0c;问n个未知数是否有唯一解&#xff0c;并输出&#xff0c;并输出最少需要前k…

Kubernetes架构为什么是这样的?

小编序&#xff1a;在上周发布的《从“鸿沟理论”看云原生&#xff0c;哪些技术能够跨越鸿沟&#xff1f;》一文中&#xff0c;灵雀云CTO陈恺表示&#xff1a;Kubernetes在云计算领域已经成为既定标准&#xff0c;进入主流市场&#xff0c;最新版本主要关注在稳定性、可扩展性方…

AtCoder4380 [AGC027F] Grafting(拓扑排序)

problem 洛谷链接 solution 首先特判掉两棵树一开始就相同的情况。 那么接下来就是一定要操作才能相同的情况了。 群龙无首不行&#xff0c;我们先定根。不妨枚举第一步的叶子操作&#xff0c;即枚举叶子以及其接的点。 然后对于 A,BA,BA,B 都以这个叶子为根&#xff0c;…

开源 , KoobooJson一款高性能且轻量的JSON框架

在C#领域&#xff0c;有很多成熟的开源JSON框架&#xff0c;其中最著名且使用最多的是 Newtonsoft.Json ,然而因为版本迭代,其代码要兼容从net2.0到现在的最新的net框架,并且要支持.net平台下的其它语言,所以最新发布版本的Newtonsoft.Json其dll大小接近700k,另一方面,因为其复…

高斯消元模板

高斯消元通用 #include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> #include<math.h> using namespace std;const int MAXN50;int a[MAXN][MAXN];//增广矩阵 int x[MAXN];//解集 bool free_x[MAXN];//标记是否是不确…

[CodeForces gym 102956 D] Bank Security Unification(位运算优化dp)

problem cf链接 solution 读完题先直接暴力 dpdpdp 拿出来&#xff0c;dpimax⁡j<i{dpj(fi&fj)}dp_i\max_{j<i}\big\{dp_{j}(f_i\&f_j)\big\}dpi​maxj<i​{dpj​(fi​&fj​)}。 谁能优化谁就是爸爸 假设存在 j<k<ij<k<ij<k<i&…

P2403 [SDOI2010]所驼门王的宝藏

P2403 [SDOI2010]所驼门王的宝藏 题意&#xff1a; R * C的地图上有n个宝藏&#xff0c;给你n个宝藏的坐标&#xff0c;每个宝藏的位置上还有一个传送门&#xff0c;传送门有三种类型&#xff0c;1.可以传送到同行的其他宝藏位置&#xff0c;2.可以传送到同列的其他宝藏位置 …

分布式系统的构建原则

什么是构建一个可维护和可扩展的系统的意义&#xff1f;在早期&#xff0c;一个系统的形态&#xff0c;只是满足用户和服务器资源之间的通道&#xff0c;唯一要扩展和维护的是系统后面的资源&#xff0c;保证资源的可用和够用&#xff0c;而系统本身的压力并不大。系统设计跟我…