NOIP 第十二次
只能说我技不如人
A
打个暴力发现
rrrrr...
yyyyy...
xxxxx...
yyyyy...
rrrrr...
yyyyy...
xxxxx...
很有前途,所以这样构造就完了。
B
题意杀!下面是人话翻译版:
同学的策略形如 $\{p_n\}$,其中 $p_i$ 表示救 $i$ 房间里的人的概率,而且显然有 $0\le p_i\le 1,\sum p_i\le 1$。
求最小的 $m$,使得存在一种同学的策略,满足无论老师刀哪个房间的人,刀掉的期望人数都不超过 $m$。
二分答案 $m$。老师刀 $i$ 房间的人时,期望刀掉 $a_i(1-p_i)$ 个人,
则要求 $\forall i,a_i(1-p_i)\le m\Leftrightarrow\forall i,p_i\ge 1-\dfrac m{a_i}$,问能不能造出合法的 $p$。
直接把每个 $p_i$ 取到下界 $\max\{1-\dfrac m{a_i},0\}$,检查 $\sum p_i$ 是否不超过 $1$ 即可。
C
设 $f_S$ 表示从小到大(即使用 $[1,|S|]$ 的数)填完 $S$ 中的位置的方案数,考虑转移。
定义 $S$ 合法,当且仅当由 $S$ 开始至少能填出 $1$ 种满足题目要求的排列,
考虑 $S$ 合法的条件,设 $k$ 为 $S$ 中最长全零段的长度:
-
$\forall i\le k,F(i)>|S|$:存在长度为 $i$ 的全零段 $L$,则最终 $L$ 中一定都是大于 $|S|$ 的数,
所以 $L$ 的最小值一定大于 $|S|$,则所有长度为 $i$ 的段的最小值的最大值 $F(i)$ 一定大于 $|S|$。 -
$\forall i>k,F(i)\le|S|$:不存在长度为 $i$ 的全零段,则所有长度为 $i$ 的段中都有小于等于 $|S|$ 的数,
所以所有长度为 $i$ 的段的最小值都小于等于 $|S|$,则所有长度为 $i$ 的段的最小值的最大值 $F(i)$ 一定小于等于 $|S|$。
于是若 $S$ 不合法,$f_S$ 不能往出转移,否则 $\forall i\notin S$ 有转移 $f_{S\cup\{i\}}=f_{S\cup\{i\}}+f_S$。
发现并不需要记录每个位置是否被选,而只需记录全零段的长度集合便可转移(每次拆分一个全零段),
而全零段的长度集合大概只有划分数种,搜出所有状态即可。
D
先来一个阴间转化:令 A,B,C,D 点分别代表 A 型血,B 型血,AB 型血,O 型血,
边 $(u,v,1)$ 代表 $u,v$ 进行配血试验时有凝集反应,同理 $(u,v,0)$ 代表没有凝集反应。
设 $a_i=1/0$ 表示 $i$ 人有 A 原 / 抗 A 素,$b_i=1/0$ 表示 $i$ 人有 B 原 / 抗 B 素,
则 $(u,v,0)$ 要求 $\lnot(a_x\land\lnot a_y)\land\lnot(b_x\land\lnot b_y)=(\lnot a_x\lor a_y)\land(\lnot b_x\lor b_y)$ 为真,
$(u,v,1)$ 要求 $(a_x\land\lnot a_y)\lor(b_x\land\lnot b_y)=(a_x\lor b_x)\land(a_x\lor\lnot b_y)\land(\lnot a_y\lor b_x)\land(\lnot a_y\lor\lnot b_y)$ 为真,
2-SAT 即可。