Description
你最近获得了一副新卡牌。每张卡牌显示一个点数(介于 1 和 R 之间的整数)和一个花色(介于 1 和 S 之间的整数)。对于每个点数和花色的组合,恰好有一张对应的卡牌,这意味着这副牌共有 R×S 张。我们将点数为 r、花色为 s 的卡牌记为 (r,s)。
由于是全新的牌组,初始时卡牌按花色从小到大排序,相同花色时按点数从小到大排序。也就是说,(1,1) 在最上面,接着是 (2,1),……,(R,1),然后是 (1,2),(2,2),……,(R,2),依此类推直到 (R,S)。例如,R=4 点、S=2 花色时,初始顺序为:(1,1),(2,1),(3,1),(4,1),(1,2),(2,2),(3,2),(4,2)。
你希望重新排列牌组,使其按点数排序。也就是说,你想将所有相同点数的卡牌放在一起,并按点数升序排列。但你不在乎每个点数内部花色的顺序。例如,R=4 和 S=2 时,一种可能的有效新顺序是:(1,2),(1,1),(2,1),(2,2),(3,1),(3,2),(4,2),(4,1)。
你最近在学习烹饪,因此希望在不放下锅铲的情况下完成牌组排序。你决定仅使用以下多步操作来排序牌组:
- 首先,从牌组顶部取一张或多张卡牌,作为堆叠 A。
- 接着,从新的牌组顶部再取一张或多张卡牌,作为堆叠 B。
- 最后,将堆叠 A 放回牌组顶部,再将堆叠 B 放在新的牌组顶部。
注意,该操作交换了牌组的堆叠 A 部分和堆叠 B 部分,而不会影响更深层的卡牌(如果有的话)。
继续以 R=4、S=2 为例,如果第一次操作选择 3 张卡牌作为堆叠 A,2 张作为堆叠 B,则得到:
- A:(1,1),(2,1),(3,1),
- B:(4,1),(1,2),
- 剩余牌组:(2,2),(3,2),(4,2)。
将 A 放回牌组后再放上 B,新的牌组顺序为:
(4,1),(1,2),(1,1),(2,1),(3,1),(2,2),(3,2),(4,2)。
给定 R 和 S,找到一系列操作,将牌组重新排序为按点数排序(如上所述),并使用尽可能少的操作次数完成。
输入的第一行包含测试用例的数量 T。接下来的 T 行每行描述一个测试用例,包含两个整数 R 和 S,分别表示牌组的点数和花色数量。
对于每个测试用例,输出一行 Case #x: y,其中 x 是测试用例编号(从 1 开始),y 是重新排序牌组所需的最少操作次数。然后,输出 y 行,每行包含 ai bi,表示在第 i 次操作中,先取 ai 张卡牌作为堆叠 A,再取 bi 张卡牌作为堆叠 B。
3
2 2
3 2
2 3
Case #1: 1
2 1
Case #2: 2
3 2
2 1
Case #3: 2
2 3
2 2
Hint
样例解释
在样例 #1 中,初始顺序为 (1,1),(2,1),(1,2),(2,2)。交换 A=(1,1),(2,1) 和 B=(1,2) 后,牌组变为 (1,2),(1,1),(2,1),(2,2),满足按点数排序的要求。注意,每个点数内部的花色顺序可以不同,这是允许的。
在样例 #2 中,初始顺序为 (1,1),(2,1),(3,1),(1,2),(2,2),(3,2)。第一次操作交换 A=(1,1),(2,1),(3,1) 和 B=(1,2),(2,2) 后,牌组变为 (1,2),(2,2),(1,1),(2,1),(3,1),(3,2)。第二次操作交换 A=(1,2),(2,2) 和 B=(1,1) 后,牌组变为 (1,1),(1,2),(2,2),(2,1),(3,1),(3,2)。
在样例 #3 中,另一种有效解法是第一次操作 a1=4,b1=1,第二次操作 a2=3,b2=1。
数据范围
测试集 1(14 分,可见判定)
- 时间限制:30 秒。
- T=12。
- 2≤R≤5。
- 2≤S≤7。
- R×S≤14。
测试集 2(23 分,隐藏判定)
- 时间限制:60 秒。
- 1≤T≤100。
- 2≤R≤40。
- 2≤S≤40。
翻译由 DeepSeek V3 完成