Wa两个TLE了三个求助!
查看原帖
Wa两个TLE了三个求助!
746947
zjr0330楼主2023/4/6 13:38
#include <bits/stdc++.h>
using namespace std;
string n;
char op[16][2];
int k;
map <char, int> sss;
map <char, bool> s;
map <char, char> ss;
bool q[36] = {false};
unsigned long long ans = 0;
void dfs(int p, string sb) {
//	cout << sb << "\n" << p << endl;
	if (p == int(n.size())) {
		ans++;
		return;
	}
	for (int i = 0; i < int(n.size()); i++) {
		if (q[i] == false && s[sb[i]] == true) {
			char nop = sb[i];
			sb[i] = ss[nop];
			q[i] = true;
			dfs(p + i, sb);
			sb[i] = op[sss[nop]][0];
			q[i] = false;
//			cout << i << "\n" << sb << "\n" << p << "\n";
		}
//		cout << i << " this\n";
	}
}

int main() {
	cin >> n >> k;
	for (int i = 0; i < k; i++) {
		cin >> op[i][0] >> op[i][1];
		s[op[i][0]] = true;
		ss[op[i][0]] = op[i][1];
		sss[op[i][0]] = i;
	}
	dfs(0, n);
	cout << ans << endl;
	return 0;
}
2023/4/6 13:38
加载中...