摘要:
发现$m$很小,直接状压起来,可以处理出一开始的合法的状态。 对于每一个合法的状态,可以处理出它的转移方向,即在后面填一个$1$或者填一个$0$,反着处理比较方便。 考虑一下环的情况,在这题中有一个小$trick$就是我们从一个状态$s$开始转移,转移$n$轮到达$n + m$位的情况,这样子只要计 阅读全文
摘要:
基环树森林,然而我比较菜,直接tarjan找环。 发现缩点之后变成了DAG,每一个点往下走一定会走到一个环,缩点之后搜一遍看看会走到哪个环以及那个环的编号是多少,答案就是环的$siz$$ + $要走的路程。 比较垃圾的我忘记了判重边WA了好多发…… 时间复杂度$O(n)$。 Code: #inclu 阅读全文
摘要:
发现数据范围很小,想到状压dp,然后就愣住不会了。 表示太菜了并没有接触过轮廓线dp这种操作。 首先发现合法的操作过程中一定是这样子的: 按照行来看发现每一行单调不递增。 我们用$1$来表示竖着的轮廓线,用$0$来表示横着的轮廓线,那么来看一下样例,一个棋子都没有放的状态是$00011$,而在唯一的 阅读全文
摘要:
唔,太菜了,弄了好几个小时。 状压dp,设$f_{s, i}$表示选了集合$s$,以$i$结尾的最短长度,设$g_{i, j}$表示串$i$的后缀和串$j$的前缀的最长匹配长度。 $f_{s, i} + len_{j} - g_{i, j} $ 可以转移到$f_{s | (1 << (j - 1)) 阅读全文
该文被密码保护。 阅读全文
摘要:
还挺简单的。 发现这几个二进制运算并不会进位,所以我们从高到低按位贪心,一位一位计算贡献。 发现$2^{30}$刚好大于$1e9$,所以最多只要算29位。 首先算出一个全都是$0$的二进制数和一个全都是$1$的二进制数通过所有的门之后每一位的情况,可以压成两个变量做。 最后贪心的时候先看看这一位取$ 阅读全文
摘要:
BZOJ 3123 丑陋的常数,BZOJ 19968ms 卡过。 感觉几个思想都挺经典但是挺套路的。 先考虑不连边的情况怎么做,区间第$k$小,想到主席树,每一个结点维护它到根的前缀和,这样子每一次查询$x$到$y$链上的点就相当于主席树上$sum(x) + sum(y) - sum(lca(x, 阅读全文
摘要:
结果和dp没有一点关系…… 30分算法:设$f_{i, j}$表示已经选了$i$个并且有$j$个是白色的状态数,转移显然,最后答案就是$f_{n + m, m}$,时间复杂度$O(n^{2})$。 100分算法: 大神讲的好。 把已经选了的$0$的个数和$1$的个数和看作$x$轴,已经选了个$1$的 阅读全文
摘要:
感觉自己被早上的名校协作体和下午的数学题虐哭了,每天为自己的菜发愁…… 发现$a_{i}$很小,开一个桶记一下每个数 出现的个数,设$c_{i} = \sum_{j = 1}^{n}(a_{j} == i)$。 我们知道$lcm(i, j) == \frac{ij}{gcd(i, j)}$。 记$m 阅读全文
摘要:
再也不作死写FhqTreap作内层树了,卡的不如暴力呜呜呜…… 题意翻译:给一个序列,每个下标包含两个属性$a$和$v$,求第一个属性与下标形成的所有逆序对的第二个属性和,给出$m$个交换两个下标的操作,每次操作之后查询。 考虑一下交换之后会发生什么: 假设这次要交换$x$和$y$,使$x \leq 阅读全文