ARC083F
显然每个小球必须被 \((0,y)\) 或 \((x,0)\) 中的一个收掉,那么把 \(i\) 的球看成一条边,链接两个机器人。
因为 \(2n\) 个小球对应 \(2n\) 条边,故建图出来是一个基环树森林。
考虑把每条边定向,对应的就是那个球被那个机器人收了。
那么每个基环树只有两种情况(环的方向)。现在知道了每个球被那个机器人收,考虑求球的拓扑序。
若第 \(i\) 个球 \((x,y)\) 被 \((0,y)\) 收,那么所有 \((x',y')(x'=x,y'<y)\) 必须被先收,那么把 \(x',y'\) 向 \(x,y\) 建一条边。
发现每个 \(B\) 类机器人只能是一个 \(A\) 类机器人的先决条件,那么每个点最多只有一条出边。
第 \(i\) 个球被 \((x,0)\) 收也是同理的。
同时发现求这个新图只有可能是 DAG,因为 \(x',y'\) 向 \(x,y\) 建边必须满足 \(x'+y'<x+y\).
那么这就是一个森林(不是基环树森林),求拓扑序方案数是 \(n!\prod\frac{1}{sz_u}\) ,因为 \(u\) 这个点必须排在其子孙的后面。
那么对于每个基环树分别计算乘起来即可。
ARC085F
设 \(sum_i\) 表示前缀 \(1\) 的个数。
设计 dp,\(f_i\) 表示考虑了右端点为 \(i\) 的区间,且必选了一个右端点是 \(i\) 的区间,全局的答案。
初始时 \(f_0=sum_n\).
考虑把区间按照右端点排序,现在加入一个区间,考虑贡献。
若 \(j<l\),即与上一个区间不交,\(f_r\gets \max(f_r,f_j+r-l+1-2(sum_r-sum_{l-1}))\)
若 \(j\ge l\) 即相交了,\(f_r\gets \max(f_r,f_j+(r-j)-2(sum_r-sum_j))\).