链接:CF1744A
这道题目就是说每个测试都有一个数组和一个同样长的字符串,每次可以把数组中的一个数批量换成一个小写英文字母,问给定的组合是否合法?
建一个数组xxx,相当于一个表,在xix_ixi 上记录 $i。表示的字母,只要以后读到xix_ixi 上的值不等于当前的就直接 NO 。
时间 15ms
// LUOGU_RID: 91222907
#include<iostream>
using namespace std;
void s() {
	int n;
	cin >> n;
	int z[n];
	for (int i = 0; i < n; i++) cin >> z[i];
	string st;
	cin >> st;
	int map[55];
	for (int i = 0; i < 55; i++) map[i] = -1;
	for (int i = 0; i < n; i++) {
		if (map[z[i]] == -1) {
			map[z[i]] = st[i] - 'a';
		} else {
			if (map[z[i]] != st[i] - 'a') {
				cout << "NO" << endl;
				return;
			}
		}
	}
	cout << "YES" << endl;
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n;
	cin >> n;
	while (n--) {
		s();
	}
	return 0;
}我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=32jh0ae4lqsko