退役划水(22)/一道题的题解以及这道题加强版的题解以及这道题加强版的加强版的题解征集

开篇是一些扯淡,如果你想看的是那道题,直接往下翻到没有图片的地方就好(有两条分界线的地方)

高产之后阅读量下滑了(不如不更)

但是还是记录一下生活(一些个流水账)


 

上一篇博客没多少人读,可能是读的比较粗也可能是发现了也懒得破译也可能是没破译出来(应该不会吧 很简单的)

不过结论是并没有人对此做出什么回应(其实似乎也没什么可回应的)

如果单看一个空行的话太容易被发现了,所以选择直接接在最后一行后面

但是似乎大家对这种谜语人行为并不感兴趣,而且为了防止以后大家点进我博客第一件事就是Ctrl+A,所以还是先不这么玩了

然而按照DC的尿性,等到有什么需要一点脑洞加密的东西可能还会再加密放出来

 


 

按照惯例转发一些发在QQ空间的值得纪念的小事

终于到萌新线了

(虽然事实上在昨天我又推了一点到了11.54)

 (仔细比对的话 发现有些歌真的半年没破记录了 如Vindication)

(骨折光prs快一年没推了)

事实上是在仿写半年前的说说(

(但是半年前说的卷可一点都没有实现)


 

除了打游戏以外,其实也在尝试做一些有点意义的事情

(看着同龄人一个比一个现充,唉当代大学生就数我最失败)

脑子不行那就上身体,也算是有点贡献

(但有一说一针管怎么那么粗,我没见过那么粗的针管)

不过有一点后悔,早知道就在浙江献了,似乎在浙江献血可以有志愿者小时数,但在河北就没有

上个学期啥也没干,志愿者小时数还保持着0呢


 


 

算了 来点有营养的东西

今天起床,没什么事,打算学习

但是我打开了B站

然而B站也觉得我太颓了,所以给我推了学习的东西

感觉是可以做成交互题然后扩展到OI上的,而且大概还不算太简单

考虑下面的问题:

(Easy version): 12个硬币,其中没有假币或有1个假币, 假币重量与其它的不同,但不确定是更重还是更轻。 天平称量3次,确定是否有、哪个是假币、假币偏轻还是偏重(共25种情况)

(Hard version): 你必须在第一次称量开始前就把三次称量方案都确定,而不能根据上一次称量的结果来决定下一次的方案

(???? version): 硬币增加一个(13个硬币,27种情况)


 

Easy version上来就说左66的回去重新看题,如果天平不平衡的话那你只排除了全都是真的的情况,由于不知道下一步没法做了

最开始我在想23=8,跟12有什么关系

然后很快就发现这个2是没有来由的,天平有左倾 右倾 平衡3种状态,那么一共有33=27种可能

用来应对25种情况应该是足够的,但也差不多满了

每次称量会分出3个分支,我们要尽量充分的运用每一个分支

那么也就是说,要让25种可能情况尽量均衡的分布在3个子分支里

我们先规定一下25种情况的表示方式,A表示全是真(All),x+表示x是假币且比其余硬币重,x反之

现在我们有A,1+,2+,3+,4+,5+,6+,7+,8+,9+,10+,11+,12+,1,2,3,4,5,6,7,8,9,10,11,12这些情况

如果想均衡的话,那你应该会想分成8+8+9

那么由于对称性,左右倾应该都对应8种情况,而平衡是9种情况

如果一个硬币x不上秤的话,那么x+,x自然就都在平衡的情况里(剩下的都是真的,怎么称怎么平衡)

所以我们决定让4个硬币不上秤,那么平衡就有4+4+1x+,x,A)=9种情况了

为了后续表达方便,我们就暂定让9,10,11,12不上秤吧。剩下的均匀分,1,2,3,4在左侧,5,6,7,8在右侧

那么结果以及所对应的情况如下:
B(平衡):9+,9,10+,10,11+,11,12+,12,A

L(左倾):1+,2+,3+,4+,5,6,7,8

R(右倾):1,2,3,4,5+,6+,7+,8+

 

继续分类讨论:

B:

这样的话其实就是4硬币2机会的完全一样的子问题。

类似的,一共9种情况,我们想让它们被均分。

平衡对应3种,那么应该是有一个没上称,假设是12

然后3个硬币似乎没办法均匀放在左右边,所以我们决定把9,10,11放在左边,取用18号硬币中的3个放在右边

(我们已经确定它们都是真的,所以用它们来做“砝码”)
BB:12,12+,A

BL:9+,10+,11+

BR:9,10,11

 

BB:

这就很简单了,12要么正常要么轻要么重,别的都正常

12放在左边,111随便拿一个放在右边

BBB:A

BBL:12+

BBR:12

 

BL:

这样的话我们知道9,10,11中一定恰好有一个是重的

那么随便拿两个上来,例如9在左10在右吧

BLB:11+

BLL:9+

BLR:10+

 

BR:BL类似

 

L:

现在有8种情况,要么是1,2,3,4中有一个重了,要么是5,6,7,8中有一个轻了

912已经确定都是真的,可以当作砝码使用

8种情况分给3个分支,那大概是3+3+2

然后这一步其实有点难想。平衡是2的话那应该有两个不上秤,假定是48

然后直观的想法是把1+,2+,3+放一组,5,6,7放一组,但发现很难构造对应的称量方案

一种直观的想法是把1,2,3,5,6,7放左边,右边放上6个标准的真币。但是我们只有4个已经确定的真币,所以不太可行

所以我们退而求其次吧,搞一个更加混乱的分组方法:1,2,6,7在左,3,5,9,10在右(其中9,10已经确定为真币)

LB:4+,8

LL:1+,2+,5

LR:3+,6,7

 

LB:4号直接跟真币比对一下就好了。

LL:12比对一下谁重,谁重谁就假,平等那就是6号假

LR:LL类似

 

R:L类似

 

至此Easy version的所有情况就说明完了

Easy version的核心思想就是均分可能性(情况)

OI的话来说,结点数固定且儿子数不超过3,那么满三叉树中平衡的那一个深度最小

 


 

来说说Hard version

不管怎么说,上述方法需要分类讨论,且后一步对前一步有依赖

如果问题简单的扩展到4次机会39个币(是3的倍数且没有满),可解但是讨论量非常非常大

这样的方法人力消耗极大,而且也很难用计算机实现

把问题扩展到OI数据范围,那直接玩完

所以我们要把问题抽象化,改成数学问题

我们考虑天平干的是个什么事:

假设每个硬币的质量分别是m1,m2,...,m12

那么天平实际上是一个函数f(int a[]),其中参数a[]是操作数组

a[x]=1说明硬币x放在左侧,a[x]=1说明硬币x放在右侧,a[x]=0说明x不上秤

天平返回的是$sgn(\sum\limits_{i=1)^{12} a_i \times m_i$

1表示左倾,1表示右倾,0表示平衡

天平的那个和式实际上类似于矩阵(向量)乘法

我们重写每个硬币的质量为mi=m0+bi,其中m0表示真币质量,bi表示偏差量

由于我们只在意bi的正负(或0)而不在意大小,所以我们假设b只有+1,1,0三种取值

构造矩阵M=[m0m0...m0],B=[b1b2...b12],A=[a1a2...a12]

我们发现一次称量就是A×(M+B)=resultresult只有1,1,0三种取值

由于我们有3次称量,就有3A向量。我们把它们并起来,得到一个新的A矩阵

A=[a1,1a1,2...a1,12a2,1a2,2...a2,12a3,1a3,2...a3,12]

这样的话结果也会是一个向量R=[result1result2result3]

现在还是一个A×(M+B)=R。其中M是一个所有元素都相等的列向量

如果我们假定A中每行的行和为0,那么等式就可以化简为A×B=R

(很好理解。放在原问题里就是,如果天平左右侧硬币数量相等,那么真币有多重便不再产生影响)

现在我们的问题是,我们要构造一个3×12的由1,0,1构成的矩阵A

然后根据每一种返回的R,求出对应的B

B还满足一个性质:要么全是0,要么恰有一个元素为11

进一步发现:由于B满足这样的性质,所以如果B0,那么R一定等于A中的某一列,或者是负的某一列

如果B=0那么也就是说怎么称都相等,这样的话也就是没有假币

如果B=A,x也就是等同于第x列,这样的话就说明bx=1也就是x是假币且偏重
如果B=A,x也就是等同于负的第x列,这样的话就说明bx=1也就是x是假币且偏轻

为了使结果R与情况一一对应,我们需要保证A中的任意两列不相等,任意两列不互补

同时由于零向量被用去表示怎么称都相等的情况,所以A中的任意一列也不能是全零

同时当然受到题意限制,A中的每个元素必须是0,1,1中的一个

还有上面为了简化问题规定的,A中每一行的行元素和为0

随便构造一个满足这些条件的矩阵吧

A=[111001111100111110011010111111100001]

实际上只有13对可能的列向量(去掉全零(271)/2,每一对互补,也就是A=A),每一对里选一个,有一对舍弃掉。

事实上你要舍弃的一对一定是三个元素都不为0的四对之一

因为你要求每行的和为0。那么也就是说绝对值的和一定要是偶数。这13对的绝对值和是[999]

所以要去掉哪一个其实是有这样的限制的

不管怎么说,现在有一个能用的A了,然后就可以根据R向量来查找对应的结果了

很妙。我线性代数真有如白学


 

至于???? version,首先我们先不考虑Hard version那个限制,也就是即使我们依然可以根据结果决定下一步决策

这样的话,13个币意味着情况全满(27种)

而且硬币总数不是3的倍数也不是2的倍数会带来一些不便。例如说第一步分成9,9,9可能都相当困难

所以在Easy versionL情况中出现的混乱可能会更加的多

更进一步的话,第一次平衡需要9种情况,那就说明是4+4+1,有4个币不上称

剩下的9个币都要上称,那么两侧币的数量就不一致了,就很难继续考虑了

这是建立在没有额外提供真币的情况下,如果给出了足量的真币作为砝码,那上述问题会相当简单

例如我如果有9个已知真币,那么左侧放19右侧放9个真币就能把情况很整齐地划分

同时如果是Hard version,我们用矩阵去构造

由于是13个币,所以13对列向量我们都不能舍弃,那么每一行和为0的条件就不能被满足

如果我们有已知的真币的话,我们可以通过往币数量少的一边添加真币来使得m0的贡献在两侧达到平衡

如果是Easy version的话,那么给我1个真币其实就够了。我左侧放15右侧放69加一个真币

那么结果就分为了L:1+,2+,3+,4+,5+,6,7,8,9/R:1,2,3,4,5,6+,7+,8+,9+

同时Hard version添加一个币也是没问题的。按照原来的方案表示即可。

这就进一步引出了一堆问题:13个币不添加真币是否无解?Hard version呢?

我的大脑宕机了。我好菜

希望能有人给出解答orz

posted @   DeepinC  阅读(164)  评论(4编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2019-08-08 [考试反思]0807NOIP模拟测试14:承认
点击右上角即可分享
微信分享提示