A.游戏
每个装备只能用一次,那么我们就可以考虑二分图匹配。
用装备向它的属性值建边,然后从属性值的 (1) 开始跑匈牙利。
如果不能匹配了就是最大的攻击次数。
需要注意,如果每次 (memset) 一定会 (T) ,所以我们记录一个时间戳,每次判断 (vis) 数组是否等于时间戳即可。
B.嘟嘟噜
裸的约瑟夫问题,容易得到通项公式 (p_{i} = (p_{i-1} + m) % i) , (i) 为剩余人数。
数据范围 (1e9) ,直接 (O(n)) 不可过,看到 (m) 远小于 (n) ,于是可以优化。
我们找到一次最多可以条几步,然后直接加上这么多,时间大大优化,可过。
跳的步数应该是 (min(n - i - 1,frac{i - x}{m}- 1))
C.天才绅士少女助手克里斯蒂娜
题目给出的是向量相乘,即叉积。
设两个向量为 ((x,y),(a,b)) ,其叉积为 ((ay-bx)) ,然后我们就可以推柿子。
[egin{array}{ll} ans &=& sum limits_{i=l}^r sum limits_{j=i+1}^r (v_i imes v_j)^2 \ &=& sum limits_{i=l}^r sum limits_{j=i+1}^r (x_iy_j-x_jy_i)^2 end{array}
]
然后我们继续乘法分配率:
[egin{array}{ll} ans &=& sum limits_{i=l}^{r} sum limits_{j=i+1}^r (x_i^2y_j^2+x_j^2y_i^2-2x_iy_ix_jy_j) \ &=& sum limits_{i=l}^r sum limits_{j=i+1}^r x_i^2y_j^2 + sum limits_{i=l}^r sum limits_{j=i+1}^r x_j^2y_i^2 - sum limits_{i=l}^r sum limits_{j=i+1}^r 2x_iy_ix_jy_j \ &=& sum limits_{i=l}^r sum limits_{j=l}^r [i!=j] imes x_i^2y_j^2 - sum limits_{i=l}^r sum limits_{j=l}^r [i!=j] imes x_iy_ix_jy_j \ &=& sum limits_{i=l}^r x_i^2 (sum limits_{j=l}^r y_j^2 -y_i^2) - (sum limits_{i=l}^r x_iy_i (sum limits_{j=l}^r x_jy_j - x_iy_i)) \ &=& sum limits_{i=l}^r x_i^2 sum limits_{j=l}^r y_j^2 - sum limits_{i=l}^r x_i^2y_i^2 - (sum limits_{i=l}^r x_iy_i sum limits_{j=l}^r x_jy_j - sum limits_{i=l}^r x_i^2 y_i^2) \ &=& sum limits_{i=l}^r x_i^2 imes sum limits_{i=l}^ry_i^2 - (sum limits_{i=l}^r x_iy_i)^2end{array}
]
线段树维护 (sum limits_{i=l}^r x_i^2) , (sum limits_{i=l}^r y_i^2) , (sum limits_{i=l}^r x_iy_i) 即可。
D.凤凰院凶真
最长公共上升子序列 (LCIS) 板子。
枚举的时候记录一下上次的更新位置和更新点即可,输出方案的时候递归输出。
(Never Give Up)