全部评论 6

  • 题解见下(倒着看)

    6天前 来自 河北

    0
  • ll sign = (xor_phi == 0) ? 1 : -1;
    ull ceil_r = (ri + rj - 1) / rj; // 向上取整
    ull term = (sign * ceil_r) % (1ULL << 32);
    if (term > (1ULL << 31)) { // 处理负数模
    term += (1ULL << 32);
    }
    sum += term;
    }
    sum %= (1ULL << 32);
    result = (result * sum) % (1ULL << 64);
    }
    cout << result << '\n';
    }
    }

    return 0;
    

    }

    6天前 来自 河北

    0
  •         cin >> t >> id;
            Entity e;
            e.last_t = t;
            e.p.resize(d);
            for (int k = 0; k < d; ++k) {
                cin >> e.p[k];
            }
            cin >> e.r >> e.phi;
            e.is_deleted = false;
            entities[id] = e;
        } else if (op == "DEL") {
            int k;
            cin >> k;
            entities[k].is_deleted = true;
        } else if (op == "UPDATE") {
            int k, t;
            cin >> k >> t;
            Entity& e = entities[k];
            update_entity(e, t);
        } else if (op == "QUERY") {
            int t, s_size;
            cin >> t;
            // 读取集合S(格式:假设以特殊标记结束,此处简化为读取到行尾)
            vector<int> S;
            int id;
            char c;
            cin >> c;  // 读取'{'
            while (cin >> id) {
                S.push_back(id);
                cin >> c;  // 读取','或'}'
                if (c == '}') break;
            }
    
            ull result = 1;
            int s = S.size();
            for (int i = 0; i < s; ++i) {
                int id_i = S[i];
                Entity& ei = entities[id_i];
                if (ei.is_deleted) {
                    // 已删除实体不参与计算,此处按0处理
                    result = 0;
                    break;
                }
    
                vector<ll> pi;
                int ri, phii;
                get_state(ei, t, pi, ri, phii);
    
                ull sum = 0;
                for (int j = 0; j < s; ++j) {
                    if (i == j) continue;
                    int id_j = S[j];
                    Entity& ej = entities[id_j];
                    if (ej.is_deleted) continue;
    
                    vector<ll> pj;
                    int rj, phij;
                    get_state(ej, t, pj, rj, phij);
    
                    // 检查曼哈顿距离
                    ll dist = manhattan(pi, pj);
                    if (dist > (ll)ri + rj) continue;
    
                    // 计算各项
                    int xor_phi = phii 
    

    6天前 来自 河北

    0
  • #include <bits/stdc++.h>
    using namespace std;

    typedef unsigned long long ull;
    typedef long long ll;

    struct Entity {
    int last_t; // 最后一次更新的时间
    vector<ll> p; // 位置
    int r; // 纠缠半径
    int phi; // 相位
    bool is_deleted; // 是否被删除
    };

    int d, n, m;
    vector<ll> delta_p; // 固定位移向量
    unordered_map<int, Entity> entities; // 存储实体,键为ID

    // 计算实体在时刻t的状态
    void get_state(const Entity& e, int t, vector<ll>& p, int& r, int& phi) {
    int dt = t - e.last_t;
    phi = e.phi;

    // 简化假设:相位不变(实际中需考虑纠缠,此处为简化处理)
    // 计算半径
    if (phi == 0) {
        r = e.r;
    } else {
        r = e.r ^ (dt % 2);  // 每步异或phi,phi=1时dt步后相当于异或dt%2
    }
    
    // 计算位置
    p.resize(d);
    ll step = (phi == 0) ? 1 : -1;
    for (int k = 0; k < d; ++k) {
        p[k] = e.p[k] + delta_p[k] * step * dt;
    }
    

    }

    // 将实体状态更新到时刻t
    void update_entity(Entity& e, int t) {
    int dt = t - e.last_t;
    if (dt == 0) return;

    // 简化处理:相位不变
    int phi = e.phi;
    
    // 更新半径
    if (phi == 1) {
        e.r ^= (dt % 2);
    }
    
    // 更新位置
    ll step = (phi == 0) ? 1 : -1;
    for (int k = 0; k < d; ++k) {
        e.p[k] += delta_p[k] * step * dt;
    }
    
    e.last_t = t;
    

    }

    // 计算曼哈顿距离
    ll manhattan(const vector<ll>& a, const vector<ll>& b) {
    ll dist = 0;
    for (int k = 0; k < d; ++k) {
    dist += abs(a[k] - b[k]);
    }
    return dist;
    }

    int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> d >> n >> m;
    delta_p.resize(d);
    for (int k = 0; k < d; ++k) {
        cin >> delta_p[k];
    }
    
    // 读取初始实体
    for (int i = 0; i < n; ++i) {
        int id;
        cin >> id;
        Entity e;
        e.last_t = 0;
        e.p.resize(d);
        for (int k = 0; k < d; ++k) {
            cin >> e.p[k];
        }
        cin >> e.r >> e.phi;
        e.is_deleted = false;
        entities[id] = e;
    }
    
    // 处理操作
    while (m--) {
        string op;
        cin >> op;
        if (op == "ADD") {
            int t, id, r, phi;
    

    6天前 来自 河北

    0
  • 看不懂一点

    2025-07-17 来自 浙江

    0
  • 请问有会做的吗?

    2025-07-16 来自 上海

    0
    • userId_undefined

      回复q

      没有

      2025-07-17 来自 浙江

      0
    • 哎呦歪 !!! 这不是会是AI上 Ctrl + c and Ctrl + v 的吗

      2025-07-17 来自 上海

      0
    • ?

      2025-07-17 来自 上海

      0

热门讨论