Submission #64455710


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define fre(x) freopen(#x".in", "r", stdin); freopen(#x".out", "w", stdout)
#define ck(x)  { cout << "check " << x << "\n"; cout.flush();}
#define int long long
#define double long double
#define inf 0x3fffffffffffffff


//-------------- templates above --------------


void solve() {
	int n;
	cin >> n;
	string s, t;
	cin >> s >> t;
	if (s == t) {
		cout << 0 << "\n";
		return ;
	}
	vector<int> a(26, -1);
	for (int i = 0; i < n; i++) {
		if (a[s[i] - 'a'] != -1) {
			if (a[s[i] - 'a'] != t[i] - 'a') {
				cout << -1 << "\n";
				return ;
			}
		}
		a[s[i] - 'a'] = t[i] - 'a';
	}
	vector<vector<int>> adj(26);
	vector<int> v(26), rd(26);
	int ans = 0;
	for (int i = 0; i < 26; i++) {
		if (a[i] >= 0) {
			v[a[i]] = 1;
			if (a[i] != i) {
				ans++;
				adj[i].push_back(a[i]);
				rd[a[i]]++;
			}
		}
	}
	int used = 0;
	for (int i = 0; i < 26; i++) {
		used += v[i] == 1;
	}
	if (used == 26) {
		cout << -1 << "\n";
		return ;
	}
	vector<int> dfn(27), low(27), stk(27);
	vector<bool> vis(27);
	vector<vector<int>> scc(27);
	int tim = 0, top = 0, cnt = 0;
	auto tarjan = [&] (auto self, int x) -> void {
		dfn[x] = low[x] = ++tim;
		vis[x] = true;
		stk[++top] = x;
		for (auto y : adj[x]) {
			if (!dfn[y]) {
				self(self, y);
				low[x] = min(low[x], low[y]);
			} else if (vis[y]) {
				low[x] = min(low[x], dfn[y]);
			}
		}
		if (dfn[x] == low[x]) {
			int now; ++cnt;
			do {
				now = stk[top--];
				vis[now] = false;
				scc[cnt].push_back(now);
			} while(x != now);
		}
	};
	for (int i = 0; i < 26; i++) {
		if (!dfn[i]) {
			tarjan(tarjan, i);
		}
	}
	for (int i = 1; i <= cnt; i++) {
		if (scc[i].size() > 1) {
			int ok = 1;
			for (auto x : scc[i]) {
				if (rd[x] > 1) {
					ok = 0;
				}
			}
			ans += ok;
		}
	}
	cout << ans << "\n";
}


signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int T = 1;
	while (T--) {
		solve();
	}
	return 0;
}

Submission Info

Submission Time
Task E - Replace
User KisuraOP
Language C++ 20 (gcc 12.2)
Score 500
Code Size 2037 Byte
Status AC
Exec Time 15 ms
Memory 3836 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 4
AC × 87
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 02_random2_00.txt, 02_random2_01.txt, 02_random2_02.txt, 02_random2_03.txt, 02_random2_04.txt, 02_random2_05.txt, 02_random2_06.txt, 02_random2_07.txt, 02_random2_08.txt, 02_random2_09.txt, 02_random2_10.txt, 02_random2_11.txt, 02_random2_12.txt, 02_random2_13.txt, 02_random2_14.txt, 02_random2_15.txt, 02_random2_16.txt, 02_random2_17.txt, 02_random2_18.txt, 02_random2_19.txt, 02_random2_20.txt, 02_random2_21.txt, 02_random2_22.txt, 02_random2_23.txt, 02_random2_24.txt, 02_random2_25.txt, 02_random2_26.txt, 02_random2_27.txt, 02_random2_28.txt, 02_random2_29.txt, 02_random2_30.txt, 02_random2_31.txt, 02_random2_32.txt, 02_random2_33.txt, 02_random2_34.txt, 02_random2_35.txt, 02_random2_36.txt, 02_random2_37.txt, 02_random2_38.txt, 02_random2_39.txt, 02_random2_40.txt, 02_random2_41.txt, 02_random2_42.txt, 02_random2_43.txt, 02_random2_44.txt, 02_random2_45.txt, 02_random2_46.txt, 02_random2_47.txt, 02_random2_48.txt, 02_random2_49.txt, 02_random2_50.txt, 02_random2_51.txt, 02_random2_52.txt, 02_random2_53.txt, 02_random2_54.txt, 02_random2_55.txt, 02_random2_56.txt, 02_random2_57.txt, 02_random2_58.txt, 02_random2_59.txt, 02_random2_60.txt, 02_random2_61.txt, 02_random2_62.txt, 02_random2_63.txt, 02_random2_64.txt, 02_random2_65.txt, 03_random3_00.txt, 03_random3_01.txt, 03_random3_02.txt, 04_handmade_00.txt, 04_handmade_01.txt, 04_handmade_02.txt, 04_handmade_03.txt, 04_handmade_04.txt, 04_handmade_05.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 15 ms 3308 KiB
00_sample_01.txt AC 1 ms 3336 KiB
00_sample_02.txt AC 1 ms 3480 KiB
00_sample_03.txt AC 1 ms 3452 KiB
01_random_00.txt AC 1 ms 3684 KiB
01_random_01.txt AC 1 ms 3532 KiB
01_random_02.txt AC 2 ms 3668 KiB
01_random_03.txt AC 1 ms 3836 KiB
01_random_04.txt AC 2 ms 3568 KiB
01_random_05.txt AC 1 ms 3696 KiB
01_random_06.txt AC 2 ms 3564 KiB
01_random_07.txt AC 2 ms 3604 KiB
02_random2_00.txt AC 2 ms 3688 KiB
02_random2_01.txt AC 2 ms 3752 KiB
02_random2_02.txt AC 2 ms 3620 KiB
02_random2_03.txt AC 2 ms 3660 KiB
02_random2_04.txt AC 2 ms 3672 KiB
02_random2_05.txt AC 2 ms 3684 KiB
02_random2_06.txt AC 2 ms 3656 KiB
02_random2_07.txt AC 2 ms 3588 KiB
02_random2_08.txt AC 2 ms 3656 KiB
02_random2_09.txt AC 2 ms 3752 KiB
02_random2_10.txt AC 2 ms 3752 KiB
02_random2_11.txt AC 2 ms 3672 KiB
02_random2_12.txt AC 2 ms 3656 KiB
02_random2_13.txt AC 2 ms 3688 KiB
02_random2_14.txt AC 2 ms 3684 KiB
02_random2_15.txt AC 2 ms 3656 KiB
02_random2_16.txt AC 2 ms 3744 KiB
02_random2_17.txt AC 2 ms 3644 KiB
02_random2_18.txt AC 2 ms 3684 KiB
02_random2_19.txt AC 2 ms 3636 KiB
02_random2_20.txt AC 2 ms 3660 KiB
02_random2_21.txt AC 2 ms 3748 KiB
02_random2_22.txt AC 2 ms 3576 KiB
02_random2_23.txt AC 2 ms 3660 KiB
02_random2_24.txt AC 2 ms 3676 KiB
02_random2_25.txt AC 2 ms 3688 KiB
02_random2_26.txt AC 2 ms 3748 KiB
02_random2_27.txt AC 2 ms 3588 KiB
02_random2_28.txt AC 2 ms 3656 KiB
02_random2_29.txt AC 2 ms 3672 KiB
02_random2_30.txt AC 2 ms 3660 KiB
02_random2_31.txt AC 2 ms 3580 KiB
02_random2_32.txt AC 2 ms 3580 KiB
02_random2_33.txt AC 2 ms 3748 KiB
02_random2_34.txt AC 2 ms 3688 KiB
02_random2_35.txt AC 2 ms 3756 KiB
02_random2_36.txt AC 2 ms 3676 KiB
02_random2_37.txt AC 2 ms 3584 KiB
02_random2_38.txt AC 2 ms 3756 KiB
02_random2_39.txt AC 2 ms 3516 KiB
02_random2_40.txt AC 2 ms 3760 KiB
02_random2_41.txt AC 2 ms 3672 KiB
02_random2_42.txt AC 2 ms 3684 KiB
02_random2_43.txt AC 2 ms 3672 KiB
02_random2_44.txt AC 2 ms 3672 KiB
02_random2_45.txt AC 2 ms 3684 KiB
02_random2_46.txt AC 2 ms 3752 KiB
02_random2_47.txt AC 2 ms 3756 KiB
02_random2_48.txt AC 2 ms 3680 KiB
02_random2_49.txt AC 2 ms 3632 KiB
02_random2_50.txt AC 2 ms 3660 KiB
02_random2_51.txt AC 2 ms 3752 KiB
02_random2_52.txt AC 2 ms 3640 KiB
02_random2_53.txt AC 2 ms 3588 KiB
02_random2_54.txt AC 2 ms 3668 KiB
02_random2_55.txt AC 2 ms 3680 KiB
02_random2_56.txt AC 2 ms 3532 KiB
02_random2_57.txt AC 2 ms 3676 KiB
02_random2_58.txt AC 2 ms 3688 KiB
02_random2_59.txt AC 2 ms 3584 KiB
02_random2_60.txt AC 2 ms 3752 KiB
02_random2_61.txt AC 2 ms 3752 KiB
02_random2_62.txt AC 2 ms 3664 KiB
02_random2_63.txt AC 2 ms 3672 KiB
02_random2_64.txt AC 2 ms 3684 KiB
02_random2_65.txt AC 2 ms 3656 KiB
03_random3_00.txt AC 2 ms 3708 KiB
03_random3_01.txt AC 2 ms 3640 KiB
03_random3_02.txt AC 2 ms 3672 KiB
04_handmade_00.txt AC 2 ms 3684 KiB
04_handmade_01.txt AC 1 ms 3412 KiB
04_handmade_02.txt AC 1 ms 3460 KiB
04_handmade_03.txt AC 2 ms 3676 KiB
04_handmade_04.txt AC 2 ms 3684 KiB
04_handmade_05.txt AC 2 ms 3584 KiB