【1042 20 重排列】 Shuffling Machine
传送门
题意
有 \(54\) 张卡片,从小到大初始依次为 \(S_{1}\sim S_{13},H_{1}\sim H_{13},C_{1}\sim C_{13},D_{1}\sim D_{13},J_{1},J_{2}\) ,给定变换次数 \(k\) 和变换序列 \(a\),变换序列中第 \(i\) 个元素放到 \(a_{i}\) 位置
数据范围
\(k\leq 20\)
题解
- 分别存下初始的和变换后的下标,对下表直接进行操作即可
- 最后输出将字符和数字分开计算得到,通过模运算可以方便得到
Code
#include<bits/stdc++.h>
using namespace std;
int main(){
int k; cin>>k;
vector<int> seq(55),a(55),b(55);
for (int i = 1; i <= 54; i++) {
cin >> seq[i];
b[i] = i;
}
for (int i = 0; i < k; i++) {
a = b;
for (int j = 1; j <= 54; j++) b[seq[j]] = a[j];
}
char c[6] = {"SHCDJ"};
for (int i = 1; i <= 54; i++) {
int id = b[i] - 1;
cout << c[id / 13] << id % 13 + 1;
if (i != 54) cout << ' ';
}
}

浙公网安备 33010602011771号