#11883. 抽牌游戏

提交66 通过6
通过率9.1%
时间限制1000ms
内存限制512MiB

题目描述

题目描述

小泽在森林里为 nn 名小伙伴主持一场抽牌游戏。小伙伴们按 11nn 编号,小泽只担任裁判,不参加游戏。

游戏开始时有一叠共 mm 张牌的牌堆。每张牌属于以下三类之一:

  • 0:白板牌;
  • 1:拆弹牌;
  • 2:炸弹牌。

输入给出的牌面顺序就是从牌堆顶部向下的顺序。所有尚未淘汰的玩家按编号循环行动,每轮由当前玩家摸走牌堆顶部的一张牌。某名玩家淘汰后会立刻退出循环,其余玩家的先后次序保持不变。

摸到不同牌时,按以下规则处理:

  1. 白板牌:本轮没有其他事情发生,这张牌从牌堆中消耗掉;
  2. 拆弹牌:玩家保存这张牌。每名玩家可以同时保存多张拆弹牌,留到以后使用;
  3. 炸弹牌,且玩家没有拆弹牌:该玩家立即淘汰,刚摸到的炸弹牌也从游戏中消失;
  4. 炸弹牌,且玩家至少有一张拆弹牌:玩家必须消耗一张拆弹牌,因此不会淘汰。随后把刚摸出的炸弹牌重新插入当前剩余牌堆中,从牌堆顶部向下数,在第 kk 张牌之后插入。如果剩余牌数不足 kk,则把炸弹放到牌堆末尾。一张拆弹牌只能使用一次。

特别地,当 k=0k=0 时,炸弹会直接放回牌堆顶部。

初始牌堆中恰好有 n1n-1 张炸弹牌,因此游戏最终会只剩下一名玩家。请输出这名玩家的编号。

输入格式

第一行输入一个整数 kk,表示使用拆弹牌后重新插入炸弹的位置参数。

第二行输入一个整数 nn,表示参与游戏的玩家数量。

第三行输入一个整数 mm,表示初始牌堆中的牌数。

第四行输入 mm 个整数,依次表示从牌堆顶部到牌堆底部的所有牌面。

输出格式

输出一行一个整数,表示最后留下的玩家编号。

输入输出样例 #1

0
4
8
0 1 1 2 0 2 0 2
2

输入输出样例 #2

0
5
20
0 2 1 1 1 0 2 0 2 0 2 1 0 1 1 0 0 0 0 1
5

输入输出样例 #3

4
5
21
0 2 1 1 1 0 2 0 2 2 1 0 1 1 0 0 0 0 1 0 1
4

边界测试 #1

0
1
1
0
1

边界测试 #2

50000
2
3
1 0 2
1

样例说明

样例 #1 中 k=0k=0,因此被拆除的炸弹会立即回到牌堆顶部。游戏过程如下:

  1. 玩家 11 摸到白板牌,没有其他事情发生;剩余牌堆为 1 1 2 0 2 0 2
  2. 玩家 22 摸到拆弹牌并保存;剩余牌堆为 1 2 0 2 0 2
  3. 玩家 33 摸到拆弹牌并保存;剩余牌堆为 2 0 2 0 2
  4. 玩家 44 摸到炸弹牌,但没有拆弹牌,因此玩家 44 淘汰,炸弹也消失;剩余牌堆为 0 2 0 2
  5. 玩家 11 摸到白板牌;剩余牌堆为 2 0 2
  6. 玩家 22 摸到炸弹牌,消耗自己的拆弹牌并免于淘汰。因为 k=0k=0,炸弹放回牌堆顶部,牌堆仍为 2 0 2
  7. 玩家 33 同样摸到炸弹牌,消耗拆弹牌后把炸弹放回顶部,牌堆仍为 2 0 2
  8. 玩家 11 摸到炸弹牌,但没有拆弹牌,因此淘汰;剩余牌堆为 0 2
  9. 玩家 22 摸到白板牌;剩余牌堆为 2
  10. 玩家 33 摸到炸弹牌且没有拆弹牌,因此淘汰。最终只剩玩家 22

边界测试 #1 中只有一名玩家,初始牌堆不含炸弹,玩家 11 直接获胜。边界测试 #2 中 kk 取到最大值;玩家 11 使用拆弹牌后,剩余牌数不足 kk,所以炸弹会被放到牌堆末尾。

测试点限制

测试点编号 kk nn mm 特殊性质
121\sim2 =0=0 100\le100 1000\le1000 牌堆中没有拆弹牌
343\sim4 1000\le1000 10000\le10000
585\sim8 100\le100
9129\sim12 50000\le50000 500000\le500000
132013\sim20 50000\le50000

对于全部测试数据:

$$0\le k\le50000,\qquad 1\le n\le50000,\qquad 1\le m\le500000.$$

所有牌面只可能是 012,并且初始牌堆中恰有 n1n-1 张炸弹牌。