返回题解分享
讨论 / 题解分享/ 帖子详情

最小公倍数 - 题解

#include <bits/stdc++.h>

using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
using i128 = __int128;

void solve() {
    int n;
    std::cin >> n;

    std::vector<std::vector<std::pair<int, int>>> a(n);
    std::set<std::vector<std::pair<int, int>>> S;
    std::map<int, std::vector<int>> mp;
    for (int i = 0; i < n; i++) {
        int m;
        std::cin >> m;
        for (int j = 0; j < m; j++) {
            int p, e;
            std::cin >> p >> e;
            a[i].emplace_back(p, e);
            mp[p].emplace_back(e);
        }
    }

    for (auto &it: mp) {
        auto &v = it.second;
        std::sort(v.begin(), v.end());
    }

    for (const auto &v: a) {
        std::vector<std::pair<int, int>> t;
        for (auto it: v) {
            int p = it.first, e = it.second;
            if (mp[p].size() == 1) {
                t.emplace_back(p, e);
            } else {
                if (e < mp[p].back()) {
                    continue;
                } else {
                    if (mp[p][mp[p].size() - 2] == e) {
                        continue;
                    } else {
                        t.emplace_back(p, e);
                    }
                }
            }
        }
        S.insert(t);
    }
    std::cout << S.size() << "\n";
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr), std::cout.tie(nullptr);

    int T = 1;
    // std::cin >> T;
    while (T--) {
        solve();
    }

    return 0;
}
0 回复 0 转发 0 喜欢 2 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!