省选模拟86

A. 人生

  首先考虑基础的dp定义,那么发现转移需要的系数只和dp是奇数的点的个数有关,所以将这个东西记录在dp状态中就行了。

  然后推一下dp转移,发现转移系数和奇数的点的个数没有关系,只与是否存在这样的点有关,所以用01来记录就可以了。

B. 赢家(winner)

  考虑用总方案减去不合法的方案,也就是1号点能到达的点和2号点能到达的点没有交集。

  然后考虑计算出1和2能到达的点恰好为S的方案数。

  同样可以用容斥来处理,即枚举S的一个子集,然后暴力减去只能到达这个子集的方案。

  然后枚举两个集合统计答案即可。

C. 黑红兔

  观察可以发现,必然存在一种最优解,使得相邻两个串长度是连续的。

  那么考虑倒过来dp,令$f[i]$表示i开始的最多的区间数。

  首先考虑对于每个$f$进行二分答案。

  然后只需要找到后面一个$j$,满足他的$dp>=mid-1$且lcp满足限制即可。

  用SA处理一下就是rank在一段连续区间,可以用主席树处理出来。

  优化的办法是$f[i]<=f[i+1]+1$,所以将二分省掉,直接暴力枚举即可。

原文地址:https://www.cnblogs.com/hzoi-cbx/p/12819902.html