找回密码
 立即注册
首页 业界区 业界 2024 ICPC杭州

2024 ICPC杭州

舒菀菀 2025-8-17 22:55:49
The 2024 ICPC Asia Hangzhou Regional Contest

外榜 https://board.xcpcio.com/icpc/49th/hangzhou
铜线: 4题739 ~ 5题726
银线: 5题723-370 ~ 6题552
金线: 6题495-470 7题+
难度(个人感觉):
纯签: AK
半签: H
Easy: EM
Mid:
Hard: BF 主要是本蒟蒻不会SCC(bushi
别的难以触碰
A

题意

三个字符串\(s_1 s_2 s_3\),重新映射26个小写字母,问能不能存在映射方案使得\(s_1=s_2\)且\(s_1 \neq s_3\)。
思路

先根据长度特判一下,如果全等长,再把\(s_2\)每个字母全变成\(s_1\)的,直接判断\(s_1s_3\)是不是相等就好了。
代码

[code]struct DSU {    std::vector fa, siz;    DSU(int n) : fa(n + 1), siz(n + 1, 1) {        std::iota(all(fa), 0);    }    int find(int x) {        while (x != fa[x]) {            x = fa[x] = fa[fa[x]];         }        return x;    }    bool merge(int x, int y) {        x = find(x); y = find(y);        if (x == y) return 0;        siz[x] += siz[y];        fa[y] = x;        return 1;    }};void solve() {    string a, b, c;    cin >> a >> b >> c;    int x = a.size(), y = b.size(), z = c.size();    if (x != y) {        cout  m >> k;    vector p(n * m);    for (int i = 0; i < n * m; i++) {        cin >> p;    }    int ans = n * m;    std::vector cnt(n);    for (int i = n * m - 1; i >= 0; i--) {        int t = (p - 1) / m;        cnt[t]++;        if (cnt[t] > k;    struct node {        int l, r, len;    };    vector a(k);    for (int i = 0; i < k; i++) {        auto &[l, r, len] = a;        cin >> l >> r;        len = r - l + 1;    }    std::sort(all(a), [&] (auto x, auto y) {        return x.len > y.len;    });    if (k == 1) {        for (int i = 0; i < n; i++) {            cout  r;        id = i + 1;        if (r >= F) {            F = std::min(F, l);        }        ans += r - l;    }    std::sort(all(a), [&] (auto a, auto b) {        return a.r == b.r ? a.l < b.l : a.r > b.r;    });    std::deque q;    vector vis(n + 1);    int now = a[0].r;    int add = 2e9;    for (int i = 0; i < n; i++) {        if (a.l >= F) {            add = std::min(add, a.l - F);            if (now > a.r) {                ans += now - a.r;            }            if (a.l < now) {                q.push_front(a.id);                vis[a.id] = 1;            }            now = std::min(now, a.l);        }    }    for (int i = 0; i < n; i++) {        if (!vis[a.id]) {            q.push_back(a.id);        }    }    if (add != 2e9) ans += add;    cout
您需要登录后才可以回帖 登录 | 立即注册