七夕祭

当然是要看蓝书P34的纸质题解的,然后(环形)均分纸牌也是很经典的一个模型,一定要记住

我们来补充一些细节

环形均分纸牌可链化证明,或者看算法提高课视频10:00的推导,x1取某一个中位数,所以某一个xi=0,所以可链化

首先是P35那个前缀和的那个式子,这个式子算的是每两人之间的交换,与直接模拟是相同的,所以是正确的

然后证明七夕祭交换的合法性:

设通过环形均分纸牌算出来的数组pp[i]表示第i个人给第i+1个人的纸牌个数(负数为接受纸牌);不妨认为第1列与第n列之间没有交换

对于这一特定的数组,不妨从1开始向n进行操作。假设第一次遇到了无法进行交换的情况,此时在第i列,我们假设p[i]>0,此时我们先找出ii+1一一对应的点(也就是行数相同的点),设有x个,除去这些点之后,第i列还有y个点,第i+1列还有z个点,那么此时一定有y<p[i](因为无法交换)

p[i+1]不超过0,则y>p[i](即命题不成立),因为此时有x+yp[i]=x+z+p[i]p[i+1]=average,即y+p[i+1]=2p[i]+z,显然矛盾

p[i+1]大于0,则先交换p[i+1],再交换p[i],先交换i+1的话,由于z=average+p[i+1]xp[i],故至少交换一一对应中的数p[i+1]z=x+p[i]average=2p[i]y个,显然大于p[i]y,即交换了y个数之后还需要交换的数的数量,显然可以交换

我们也就证明了无论怎么排列,我们一定可以通过不经过任何列交换的情况下,将行搞成一模一样的,对列同理,所以我们可以分成两个独立的部分计算

然后引理一:对均分纸牌来说,我按照那个模拟算出来每两人之间的交换数目之后,不一定真的按模拟去做,而是以任意顺序选择任意间隙和任意交换牌数,答案都不变。比如说算出来1给2三张牌,3给2一张牌,那我可以先让1给2一张牌,再让3给2一张牌,再让1个2两张牌,or whatever答案都是一样的,可以用反证法证明。环形均分纸牌也满足,因为环形均分纸牌可以拆环成链按照均分纸牌处理

我们用数学归纳法严格证明一下上述结论,假设我们先通过蓝书的式子算出多退少补的数目,比如如下

我们从1n依次考虑交换,当第一次遇到无法交换(也就是手牌不足的时候),设此时为第i个人

如果第i个人应该给第i+1个人纸牌,那么可以知道,由于前i1个人此时每个人的手牌数目都是平均数,所以我们第i个人的手牌数目大于平均数,也就是说一定能给,所以此时一定是第i+1个人给第i个人纸牌;而此时第i+1个人一定不可能给第i+2个人纸牌,否则的话有ix>sumi,ai+1<ixsumi,sumi+1>(i+1)x,其中x是平均数,sumi是纸牌数目前缀和,ai是第i个人的纸牌数目,那么可以推出sumi+1>x+sumi,ai+1>x,sumi<(i1)x,sumi+1<(i1)x+ai+1,(i+1)x<(i1)x+ai+1,ai+1>2x,重复上述推导过程可以得出ai+1无穷大,显然不可能,于是第i+2个人给第i+1个人牌,一直这么下去直到第n个人,此时我们从第n个人开始倒序给牌就好了

所以由这个引理,我们将任何一种分布的摊点抽象成纸牌模型后,只要抽象出来的牌数的分布是一模一样的,那么最优答案就是一样的,因为我总能找到一种合法的交换摊点位置的方法,所以我可以分成两维考虑(这么考虑也是下界,我们找到了一种方法来达到下界)

posted @   最爱丁珰  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示