社区讨论
求条悬棺
AT_abc399_e [ABC399E] Replace参与者 3已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mhjv1uqk
- 此快照首次捕获于
- 2025/11/04 08:58 4 个月前
- 此快照最后确认于
- 2025/11/04 08:58 4 个月前
这段代码已经改过很多次了,所以dalao也可以按照这个思路去写一篇代码,同样给关
CPP#include <bits/stdc++.h>
#define I using
#define AK namespace
#define IOI std
#undef int
#define int long long
#undef INT_MIN
#define INT_MIN (LONG_LONG_MIN + 1145)
#undef INT_MAX
#define INT_MAX (LONG_LONG_MAX - 1145)
#define inf (int)(1e18)
#define PI acos(-1.0)
#define pii pair<int, int>
I AK IOI;
int N, ans;
string s1, s2;
unordered_map<char, char> m;
bool v[128], vis[128];
inline void dfs(char c) {
if (v[c])
return;
v[c] = vis[c] = true;
if (m.count(c)) {
if (!v[m[c]]) {
dfs(m[c]);
} else if (vis[m[c]]) {
int l = 0, u = c;
do {
++l;
u = m[u];
} while (u != c);
if (l >= 2)
ans++;
}
}
vis[c] = false;
return;
}
signed main(signed argc, char const *argv[]) {
ios :: sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> N >> s1 >> s2;
s1 = '$' + s1;
s2 = '$' + s2;
if (s1 == s2) {
cout << 0 << endl;
return 0;
}
for (int i = 1; i <= N; i++) {
if (m.count(s1[i]) && m[s1[i]] != s2[i]) {
cout << -1 << endl;
return 0;
}
m[s1[i]] = s2[i];
}
for (char c = 'a'; c <= 'z'; c++) {
if (m.count(c) && !v[c])
dfs(c);
}
for (char c = 'a'; c <= 'z'; c++) {
if (m.count(c) && m[c] != c)
ans++;
}
cout << ans << endl;
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...