全部评论 3

  • 码风切换大佬%%%

    2025-08-02 来自 浙江

    1
  • #include<bits/stdc++.h>
    using namespace std;
    string s;
    int p;
    struct V { map<int, long long> m; };
    V A(const V& a, const V& b, bool sub = false) {
        V r = a;
        for (auto& kv : b.m) {
            int e = kv.first; long long c = kv.second;
            if (sub) c = -c;
            r.m[e] += c;
            if (r.m[e] == 0) r.m.erase(e);
        }
        return r;
    }
    V M(const V& a, const V& b) {
        V r;
        for (auto& ka : a.m) for (auto& kb : b.m) {
            r.m[ka.first + kb.first] += ka.second * kb.second;
        }
        vector<int> d;
        for (auto& kv : r.m) if (kv.second == 0) d.push_back(kv.first);
        for (int e : d) r.m.erase(e);
        return r;
    }
    V W(V a, int e) {
        V r; r.m[0] = 1;
        while (e) { if (e & 1) r = M(r, a); a = M(a, a); e >>= 1; }
        return r;
    }
    V F();
    V T() {
        V v = F();
        while (p < s.size() && s[p] == '*') { p++; V v2 = F(); v = M(v, v2); }
        return v;
    }
    V E() {
        V v = T();
        while (p < s.size() && (s[p] == '+' || s[p] == '-')) {
            char c = s[p++];
            V v2 = T();
            v = (c == '+' ? A(v, v2) : A(v, v2, true));
        }
        return v;
    }
    V F() {
        V v;
        if (s[p] == '(') { p++; v = E(); p++; }
        else if (isdigit(s[p])) {
            long long n = 0;
            while (p < s.size() && isdigit(s[p])) { n = n * 10 + (s[p++] - '0'); }
            v.m[0] = n;
        } else { v.m[1] = 1; p++; }
        if (p < s.size() && s[p] == '^') {
            p++; int e = 0;
            while (p < s.size() && isdigit(s[p])) e = e * 10 + (s[p++] - '0');
            v = W(v, e);
        }
        return v;
    }
    V G(string t) {
        s = ""; for (char c : t) if (c != ' ') s.push_back(c);
        p = 0; return E();
    }
    int main() {
        string b; getline(cin, b);
        V bp = G(b);
        int n; cin >> n; string tmp;
        getline(cin, tmp);
        vector<char> ans;
        for (int i = 0; i < n; i++) {
            string o; getline(cin, o);
            V op = G(o);
            if (op.m == bp.m) ans.push_back('A' + i);
        }
        sort(ans.begin(), ans.end());
        for (char c : ans) cout << c;
    }
    

    1周前 来自 广东

    0
  • d

    2025-08-01 来自 浙江

    0

热门讨论