环形均分纸牌问题

环形均分纸牌问题

问题:给定n个整数,呈环形排列,每个数可以往两个相邻的数传递(每次至少1),最终要使得n个数相等,求传递的数的最小值

无解条件很显然:n不能整除i=1na[i]

现在规定有解,设a=i=1na[i]n

我们规定ii1传递x,记为i1i传递x,这时候我们就可以把整个传递过程规定为单方向传递

设对于i,则i传递给i+1的数为xi,特别的,设n传递给1

那么可以得到:

{a1a=xnx1a2a=x1x2a3a=x2x3a4a=x3x4ana=xn1xn

那么移项,可以得到:

{x1=xna1+ax2=x1a2+ax3=x2a3+axn=xn1an+a

将后式带入前式,先不考虑xn,有

xi=xnj=1iaj+i·a

最终会有xn=xn

那么如果我们设si=(j=1iaj)i·a,则原式化为xi=xnsi

因为我们最终目标是要求min{i=1n|xi|}

原式=min{i=1n|xnsi|}

此时因为我们的s的值都可以O(n)预处理出来,那么我们只需要求出xn在何值的时候上式最小即可

那就是s的中位数了

此时,xn的值知道之后,就可以回带求出所有的x

posted @   spdarkle  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示