退役划水(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$上来就说左$6$右$6$的回去重新看题,如果天平不平衡的话那你只排除了全都是真的的情况,由于不知道下一步没法做了
最开始我在想$2^3=8$,跟$12$有什么关系
然后很快就发现这个$2$是没有来由的,天平有左倾 右倾 平衡$3$种状态,那么一共有$3^3=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+1(x+,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$放在左边,取用$1-8$号硬币中的$3$个放在右边
(我们已经确定它们都是真的,所以用它们来做“砝码”)
$BB:12-,12+,A$
$BL:9+,10+,11+$
$BR:9-,10-,11-$
$BB:$
这就很简单了,$12$要么正常要么轻要么重,别的都正常
$12$放在左边,$1-11$随便拿一个放在右边
$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$中有一个轻了
$9-12$已经确定都是真的,可以当作砝码使用
$8$种情况分给$3$个分支,那大概是$3+3+2$了
然后这一步其实有点难想。平衡是$2$的话那应该有两个不上秤,假定是$4$和$8$吧
然后直观的想法是把$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:1$和$2$比对一下谁重,谁重谁就假,平等那就是$6$号假
$LR:$与$LL$类似
$R:$与$L$类似
至此$Easy\ version$的所有情况就说明完了
$Easy\ version$的核心思想就是均分可能性(情况)
用$OI$的话来说,结点数固定且儿子数不超过$3$,那么满三叉树中平衡的那一个深度最小
来说说$Hard\ version$
不管怎么说,上述方法需要分类讨论,且后一步对前一步有依赖
如果问题简单的扩展到$4$次机会$39$个币(是$3$的倍数且没有满),可解但是讨论量非常非常大
这样的方法人力消耗极大,而且也很难用计算机实现
把问题扩展到$OI$数据范围,那直接玩完
所以我们要把问题抽象化,改成数学问题
我们考虑天平干的是个什么事:
假设每个硬币的质量分别是$m_1,m_2,...,m_{12}$
那么天平实际上是一个函数$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$表示平衡
天平的那个和式实际上类似于矩阵(向量)乘法
我们重写每个硬币的质量为$m_i = m_0 + b_i$,其中$m_0$表示真币质量,$b_i$表示偏差量
由于我们只在意$b_i$的正负(或$0$)而不在意大小,所以我们假设$b$只有$+1,-1,0$三种取值
构造矩阵$M =\begin{bmatrix} m_0 \\ m_0 \\ ...\\ m_0 \end{bmatrix} , B =\begin{bmatrix} b_1 \\ b_2 \\ ...\\ b_{12} \end{bmatrix}, A =\begin{bmatrix} a_1 & a_2 & ...& a_{12} \end{bmatrix}$
我们发现一次称量就是$A \times (M+B) = result$,$result$只有$1,-1,0$三种取值
由于我们有$3$次称量,就有$3$个$A$向量。我们把它们并起来,得到一个新的$A$矩阵
$ A =\begin{bmatrix} a_{1,1} & a_{1,2} & ...& a_{1,12} \\ a_{2,1} & a_{2,2} & ...& a_{2,12} \\ a_{3,1} & a_{3,2} & ...& a_{3,12} \end{bmatrix} $
这样的话结果也会是一个向量$R= \begin{bmatrix} result_1 \\ result_2 \\ result_3 \end{bmatrix}$
现在还是一个$A \times (M+B) = R$。其中$M$是一个所有元素都相等的列向量
如果我们假定$A$中每行的行和为$0$,那么等式就可以化简为$ A \times B = R$
(很好理解。放在原问题里就是,如果天平左右侧硬币数量相等,那么真币有多重便不再产生影响)
现在我们的问题是,我们要构造一个$3 \times 12$的由$1,0,-1$构成的矩阵$A$
然后根据每一种返回的$R$,求出对应的$B$。
且$B$还满足一个性质:要么全是$0$,要么恰有一个元素为$1$或$-1$
进一步发现:由于$B$满足这样的性质,所以如果$B\neq 0$,那么$R$一定等于$A$中的某一列,或者是负的某一列
如果$B = 0$那么也就是说怎么称都相等,这样的话也就是没有假币
如果$B = A_{*,x}$也就是等同于第$x$列,这样的话就说明$b_x=1$也就是$x$是假币且偏重
如果$B = -A_{*,x}$也就是等同于负的第$x$列,这样的话就说明$b_x=-1$也就是$x$是假币且偏轻
为了使结果$R$与情况一一对应,我们需要保证$A$中的任意两列不相等,任意两列不互补
同时由于零向量被用去表示怎么称都相等的情况,所以$A$中的任意一列也不能是全零
同时当然受到题意限制,$A$中的每个元素必须是$0,1,-1$中的一个
还有上面为了简化问题规定的,$A$中每一行的行元素和为$0$
随便构造一个满足这些条件的矩阵吧
$ A=\begin{bmatrix} -1& 1 & -1 &0 &0& -1&1&1&1&-1&0&0 \\ -1& -1 & 1&1&-1&0&0&1&-1&0&1&0 \\ 1& -1 & -1&1&1&-1&-1&0&0&0&0&1 \end{bmatrix} $
实际上只有$13$对可能的列向量(去掉全零$(27-1)/2$,每一对互补,也就是$A=-A'$),每一对里选一个,有一对舍弃掉。
事实上你要舍弃的一对一定是三个元素都不为$0$的四对之一
因为你要求每行的和为$0$。那么也就是说绝对值的和一定要是偶数。这$13$对的绝对值和是$\begin{bmatrix} 9\\9\\9 \end{bmatrix} $
所以要去掉哪一个其实是有这样的限制的
不管怎么说,现在有一个能用的$A$了,然后就可以根据$R$向量来查找对应的结果了
很妙。我线性代数真有如白学
至于$????\ version$,首先我们先不考虑$Hard\ version$那个限制,也就是即使我们依然可以根据结果决定下一步决策
这样的话,$13$个币意味着情况全满($27$种)
而且硬币总数不是$3$的倍数也不是$2$的倍数会带来一些不便。例如说第一步分成$9,9,9$可能都相当困难
所以在$Easy\ version$的$L$情况中出现的混乱可能会更加的多
更进一步的话,第一次平衡需要$9$种情况,那就说明是$4+4+1$,有$4$个币不上称
剩下的$9$个币都要上称,那么两侧币的数量就不一致了,就很难继续考虑了
这是建立在没有额外提供真币的情况下,如果给出了足量的真币作为砝码,那上述问题会相当简单
例如我如果有$9$个已知真币,那么左侧放$1-9$右侧放$9$个真币就能把情况很整齐地划分
同时如果是$Hard\ version$,我们用矩阵去构造
由于是$13$个币,所以$13$对列向量我们都不能舍弃,那么每一行和为$0$的条件就不能被满足
如果我们有已知的真币的话,我们可以通过往币数量少的一边添加真币来使得$m_0$的贡献在两侧达到平衡
如果是$Easy\ version$的话,那么给我$1$个真币其实就够了。我左侧放$1-5$右侧放$6-9$加一个真币
那么结果就分为了$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$