【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 << ' ';
	}
}
posted @ 2021-02-21 18:38  Hyx'  阅读(56)  评论(0)    收藏  举报