1 条题解

  • 0
    @ 2025-10-25 16:16:26

    题意转化

    设选的三只海狸为 A,B,CA,B,C,队伍总能力为:

    [ S = \max(X_A,X_B,X_C) + \max(Y_A,Y_B,Y_C) + \max(Z_A,Z_B,Z_C) ]

    条件:每个成员有一项能力严格大于其他两人。

    这意味着:

    • 不能有人两项能力都最大。
    • 三个人的“优势能力”必须分布在三个不同维度上。

    核心思路

    关键观察
    如果我们固定优势能力的分配方式,比如:

    • AA:思考值最大
    • BB:行动值最大
    • CC:运气值最大

    那么条件变成:

    1. XA>max(XB,XC)X_A > \max(X_B, X_C)
    2. YB>max(YA,YC)Y_B > \max(Y_A, Y_C)
    3. ZC>max(ZA,ZB)Z_C > \max(Z_A, Z_B)

    并且总能力值: [ S = X_A + Y_B + Z_C ] 因为 AAXX 上最大,BBYY 上最大,CCZZ 上最大。


    算法设计

    我们可以枚举所有 3!=63! = 6 种优势分配方案,对每种方案求最大 SS,最后取最大值。

    以方案 (Xmax,Ymax,Zmax)(X_{\max}, Y_{\max}, Z_{\max}) 为例:

    1. XX 降序排序。
    2. 枚举 AA(思考值最大的那个人),那么 BBCC 必须来自 AA 之后的位置(保证 XA>XB,XA>XCX_A > X_B, X_A > X_C)。
    3. 我们需要在 AA 之后的海狸中,选择 BBCC 满足:
      • YB>max(YA,YC)Y_B > \max(Y_A, Y_C)
      • ZC>max(ZA,ZB)Z_C > \max(Z_A, Z_B) 并且最大化 YB+ZCY_B + Z_C

    数据结构优化

    为了高效求解,我们可以:

    • 从后往前扫描,用线段树维护后缀中 (Y,Z)(Y, Z) 的信息。
    • 线段树以 YY 为键(离散化后),存储对应的最大 ZZ 值。
    • 对于每个 AA,我们在 Y>YAY > Y_A 的范围内查询最大 ZZ 值,同时要保证选出的 BBCC 不是同一只海狸,且 ZZ 足够大。

    具体实现时,可以维护最大 Z 和次大 Z,并记录它们对应的 YY 值,以避免 BBCC 是同一人。


    算法步骤

    1. 枚举 6 种优势分配排列。
    2. 对每种排列 (p1,p2,p3)(p_1, p_2, p_3)
      • p1p_1 能力降序排序。
      • 初始化线段树。
      • 从后往前扫描,将海狸加入线段树。
      • 对于每个位置 ii 作为 AA,在 p2p_2 能力 >> AAp2p_2 能力的区间中,查询最大 p3p_3 能力,并检查 p3p_3 能力 >> AAp3p_3 能力。
      • 更新答案 ans=max(ans,XA+YB+ZC)ans = \max(ans, X_A + Y_B + Z_C)
    3. 如果 ansans 仍为初始值(比如 001-1),输出 1-1,否则输出 ansans

    复杂度分析

    • 枚举 6 种排列。
    • 每次排序 O(NlogN)O(N \log N)
    • 线段树操作 O(NlogN)O(N \log N)
    • 总复杂度 O(6NlogN)O(6 \cdot N \log N),可过 N1.5×105N \le 1.5 \times 10^5

    总结

    本题的难点在于:

    1. 将“每人有一项严格最大”转化为固定优势分配的枚举。
    2. 利用排序和线段树高效求解每种分配下的最大总能力。
    3. 注意 BBCC 不能是同一人,需维护次大值或类似技巧。

    最终复杂度 O(NlogN)O(N \log N),可解决 N1.5×105N \le 1.5 \times 10^5

    • 1

    信息

    ID
    4076
    时间
    1000ms
    内存
    256MiB
    难度
    8.5
    标签
    递交数
    4
    已通过
    1
    上传者