开坑 主要是cf和atcoder 记录一下非水题
博弈论,两人轮流在树上跑,每次分别可以移动不超过 $da$ 和 $db$ 的距离,问先手能不能追到后手。
三种情况必胜:
证明我吐了,有时间再来补。
给定一个序列 $a_i$,如果 $a_i = i$,那么你可以将它删掉,多次询问如果强制前 $x$ 个数和后 $y$ 个数都不能删,最多能删几个数。
发现问题的可二分性,巨佬题解。
设 $\text{lim}_i$ 表示如果禁止删除的长度 $\le \text{lim}_i$,那么该位置可以被删,否则不能被删。
考虑二分求解,对于我们正在二分的 $\text{mid}$,等价于求前面满足 $\text{lim}_j \ge \text{mid}$ 的有多少个,这个过程可以使用主席树优化到 $O(n \log n)$。
对于询问,直接询问 $[1,n-y]$ 中 $\text{lim}_i \ge x$ 的个数即可,主席树上查询即可。
交互题,给定 $1$ 到 $2n$ 共 $2n$ 个数,你可以选择当 A 或 B。
你需要选择一个角色扮演并获胜。
给定一个 $n \times m$ 的方格图,分黑白格,要求用 $1 \times x$ 和 $x \times 1$ 的砖块铺满所有黑格,白格不能放砖,且所有砖不能重叠,问最少需要多少砖。
给定一个序列 $a_i$,将其拆分成两个序列 $b_i$ 和 $c_i$,要求满足 $a_i=b_i+c_i$,且 $b_i$ 递增,$c_i$ 递减。求 $\max(b_i,c_i)$ 的最小值。多组询问,每次对 $a_i$ 进行区间加。
$\max(b_i,c_i)$ 等价于 $\max(b_n,c_1)$,在 $b_1$ 和 $c_1$ 固定时,$b_i$ 的增量越少越好,所以如果 $a_i > a_{i-1}$,那么将多的部分加到$b_i$ 上面,否则将多的部分减到 $c_i$ 上面。因此答案为 $$\max(b_n,c_1)=\max(x+\sum_{i=2}^n\max(0,a_i-a_{i-1}),a_1-x)$$ 设 $y=\sum_{i=2}^n\max(0,a_i-a_{i-1})$,则答案为 $\max(x+y, a_1-x)$,直接取 $x=\lfloor \frac{a_1+y}{2} \rfloor$ 即可。
修改时,区间加只会改变两个点的差分值,因此可以 $O(1)$ 维护。
有 $n$ 个怪,每个怪物有一个攻击力 $d$。有 $m$ 个武器。每个武器有两个属性,耐久度 $a$ 和 防御值 $b$。对于一个打怪顺序,按顺序处理每一个怪:
对于每个武器,所有 $n!$ 种打怪顺序出现概率相等,求期望收到的伤害。
考虑先把所有怪按攻击力排序,那么对于一个武器,设 $d \ge b$ 的怪物有 $x$ 个。那么对于这 $x$ 个怪物,他能造成伤害当且仅当他前面至少有 $b$ 个怪物属于这 $x$ 个怪物,概率为 $\frac{x-b}{x}$;对于剩下 $n - x$ 个怪物,他和上述 $x$ 个怪物的相对顺序相当于插空,他能造成伤害当且仅当上述 $x$ 个怪物至少有 $b$ 个在它前面,概率为 $\frac{x+1-b}{x+1}$。
期望还需要乘以怪物他们自己的攻击力,上述 $x$ 个怪物和 $n-x$ 个怪物分别是一个后缀和前缀,因此求个前缀和乘上即可。