4927. 排列扑克牌
时间限制:1000 MS 内存限制:256 MB
题目描述
### 排列扑克牌 你的任务是对 $ n $ 张扑克牌进行排序。每张扑克牌由一个花色(S、H、C 或 D)和一个数字组成。编写一个程序,按照以下伪代码对扑克牌进行排序: 分区算法(Partition) ```plaintext Partition(A, p, r) 1 x = A[r] 2 i = p-1 3 for j = p to r-1 4 do if A[j] <= x 5 then i = i+1 6 exchange A[i] and A[j] 7 exchange A[i+1] and A[r] 8 return i+1 ``` 快速排序(Quicksort) ```plaintext Quicksort(A, p, r) 1 if p < r 2 then q = Partition(A, p, r) 3 run Quicksort(A, p, q-1) 4 run Quicksort(A, q+1, r) ``` 这里,数组 $ A $ 表示一副扑克牌,比较操作基于扑克牌的数字。 你的程序还应该判断排序结果是否**稳定**。所谓“稳定性”,是指:在输出中,具有相同数字的扑克牌的顺序与输入中的顺序一致。 --- ## 输入格式 第一行包含一个整数 $ n $,表示扑克牌的数量。 接下来的 $ n $ 行,每行给出一张扑克牌。每张扑克牌由一个字符和一个整数组成,用空格分隔。 --- ## 输出格式 第一行,输出排序结果是否稳定("Stable" 或 "Not stable")。 接下来的 $ n $ 行,按与输入相同的格式输出排序后的扑克牌。 --- ## 数据范围 - $ 1 \leq n \leq 100,000 $ - $ 1 \leq $ 扑克牌上的数字 $ \leq 10^9 $ - 输入中没有两张完全相同的扑克牌。 --- ## 输入 ```in1 6 D 3 H 2 D 1 S 3 D 2 C 1 ``` ## 输出 ```out1 Not stable D 1 C 1 D 2 H 2 D 3 S 3 ``` ```in2 2 S 1 H 1 ``` ```out2 Stable S 1 H 1 ```