舒菀菀 发表于 2025-8-17 22:55:49

2024 ICPC杭州

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\)是不是相等就好了。
代码

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 = fa = fa];         }      return x;    }    bool merge(int x, int y) {      x = find(x); y = find(y);      if (x == y) return 0;      siz += siz;      fa = 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) {      coutm >> 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++;      if (cnt > k;    struct node {      int l, r, len;    };    vector a(k);    for (int i = 0; i < k; i++) {      auto & = 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++) {            coutr;      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.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.id] = 1;            }            now = std::min(now, a.l);      }    }    for (int i = 0; i < n; i++) {      if (!vis.id]) {            q.push_back(a.id);      }    }    if (add != 2e9) ans += add;    cout
页: [1]
查看完整版本: 2024 ICPC杭州