社区讨论

求条悬棺

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 条回复,欢迎继续交流。

正在加载回复...