#3006. 刘谦的魔术时光

刘谦的魔术时光

背景

刘谦,世界著名魔术师,1976年6月25日出生于台湾省高雄市,祖籍江西省九江市,魔术师,毕业于台湾东吴大学。 现场演出遍布世界30多个国家200多个城市,并多次受邀至世界各地的国际性的魔术师大会担任演出嘉宾及专题讲座的讲师。 2024年春晚给我们表演了一个洗牌算法有关的魔术 《守岁共此时》 ,今天我们先以上帝视角模拟一下,具体步骤:

  • 第1步:四张牌,对折后撕开,此时8张牌的位置为:四张一组,然后相同的四张第二组;
  • 第2步:把最顶上和名字字数相同的牌数放到最下面,普通人放 2~4 张,具体放几张其实不重要,因为不会改变牌的相对顺序,不妨假定此时 8 张牌按照顺序分别是: ABCsABCs
  • 第3步:拿出3张牌插进去,此时顺序变成:s******s;(*为未知)
  • 第4步:藏牌,藏了s
  • 第5步:南北方人根据不同属性,从牌顶向中间插入 1~3 张牌,这个步骤不重要,只要保证最末的一张没动就行,此时牌面变成:*******s
  • 第6步:男生丢1张,女生丢2张;此时假设男生手里是:BCSEFs,女生:CDEFs(这里的 B~F 都是未知)。这里有一个小彩蛋:如果你是第 3 种性别,丢 3 张牌,或者你是无性别人,一张牌都不丢,魔术亦可成立!这是一个「约瑟夫问题」的特殊形式,关键是第 7 步移动的是 7 张牌
  • 第7步:「见证奇迹的时刻」,从牌顶往底部放 7 张牌:
    • 男生:CDEFsB
    • 女生:EFsCD
  • 第8步:留一张放到最下面,然后丢一张。往复循环
    • 1、男生EFsBC,女生 sCDE
    • 2、男生sBCE,女生 DEs
    • 3、男生CEs,女生 sD
    • 4、男生sC,女生 s
    • 5、男生s
  • 于是我们发现藏的牌永远在奇数位,永远是留的,证毕!

所以我们发现,如果操作失误,那就不对劲了,比如小尼:

题目描述

只要我们算法学得好,人人都是魔术师,请你编写程序把这个魔术复现一下吧!

为保证判题方便和准确,所有插入中间均视为向下取整插在最中间。

输入格式

输入一共 行:

  • 第一行: 四个整数,从1到13代表从A到K的牌。
  • 第二行: 一个从1到4的整数,代表名字长度。
  • 第三行: 一个从1到3的整数,代表处于南方、北方、不确定。
  • 第四行: 一个从0~2的整数,代表无性别、男性、女性。

比如样例一的输入

1 8 6 7
2
1
2

的意思是:

  1. 抽到的卡牌是1 8 6 7
  2. 名字2个字
  3. 在北方
  4. 是女生

输出格式

输出分两部分:

  1. 关键步骤后的结果
  2. 最终拼起来的结果

比如样例一的输出

  1. 前11行就是关键步骤的过程,包含步骤序号和此时手里卡牌点数,步骤序号与点数之间用冒号间隔,点数自己之间用空格间隔。
  2. 而最后一行第一个数是藏起来的,第二个是我们最后剩下的:

比如样例一的输出

step 1:1 8 6 7 1 8 6 7 
step 2:6 7 1 8 6 7 1 8 
step 3:8 6 7 1 6 7 1 8 
step 4:6 7 1 6 7 1 8 
step 5:7 1 6 6 7 1 8 
step 6:6 6 7 1 8 
step 7:7 1 8 6 6 
step 8:8 6 6 7 
step 8:6 7 8 
step 8:8 6 
step 8:8 
8 8

样例

1 8 6 7
2
1
2
step 1:1 8 6 7 1 8 6 7
step 2:6 7 1 8 6 7 1 8
step 3:8 6 7 1 6 7 1 8
step 4:6 7 1 6 7 1 8
step 5:7 1 6 6 7 1 8
step 6:6 6 7 1 8
step 7:7 1 8 6 6
step 8:8 6 6 7
step 8:6 7 8
step 8:8 6
step 8:8
8 8

来源

ZGOJ fslong