70pts求救
查看原帖
70pts求救
743373
Vitamin_B楼主2023/8/10 17:12

提交记录

代码:

# include <bits/stdc++.h>

# define old_six \
	ios::sync_with_stdio (0);\
	\
	cin.tie (0);\
	\
	cout.tie (0);

# define ffor(i,name) \
	for (auto i = name.begin (); i != name.end (); ++ i)

# define reg register

using namespace std;

typedef long long ll;

typedef pair <int, int> pii;

typedef pair <ll, ll> pll;

int n, a[30], x, a1[30], a2[30], a3[30];

string s1, s2, s3;

bool f, vis[30];

bool check () {

	for (reg int i = 0; i < n; ++ i)
		if (~ a[a1[i]] && ~ a[a2[i]] && ~ a[a3[i]] && (a[a1[i]] + a[a2[i]]) % n != a[a3[i]] && (a[a1[i]] + a[a2[i]] + 1) % n != a[a3[i]])
			return 1;

	return 0;

}

void dfs (int step) {
//	cout << step << '\n';
	if (step >= n) {
//		for (reg int i = 0; i < n; ++ i) cout << a[i] << ' ';
		f = 0;
//		cout << '\n';
		for (reg int i = n; i --;) {

			x = a[a1[i]] + a[a2[i]] + f;

			if (x < n)
				f = 0;
			else
				x -= n, f = 1;

			if (x != a[a3[i]])
				return ;

		}

		for (reg int i = 0; i < n; ++ i)
			cout << a[i] << ' ';

		exit (0);

	}

	if (check ())
		return ;

	for (reg int i = 0; i < n; ++ i)
		if (! vis[i]) {

			a[step] = i;

			vis[i] = 1;

			dfs (step + 1);

			vis[i] = 0;

			a[step] = -1;

		}

	return ;

}

int main () {

	old_six

	cin >> n >> s1 >> s2 >> s3;

	for (reg int i = 0; i < n; ++ i)
		a1[i] = s1[i] - 'A', a2[i] = s2[i] - 'A', a3[i] = s3[i] - 'A', a[i] = -1;

	dfs (0);

	return 0;

}
2023/8/10 17:12
加载中...