一句话题解(~ 2020.4.9)

  有些题目觉得价值不是特别大,不值得想单独写一篇随笔,但不至于一句话都不提。(其实是想偷点懒)

  • UVa Live 4327 单调队列优化动态规划。
  • UVa Live 4015 $f_{i,j}$表示从$i$开始走,在$i$的子树内走到$j$最少要走的距离。$g_{i, j}$只是增加一个要走回$i$的限制。转移是显然的。
  • UVa Live 4490 一种书被拿出来再放回去会不会增加贡献取决于这种书有没有完全被取走。然后随便状态压缩一下就过了
  • UVa 11600 转移只与连通块的大小有关。状压所有连通块的大小。(这题居然没有极限数据卡$2^{29}$????)
  • UVa Live 3029 最大子矩形一定是极大子矩形。极大子矩形只用考虑当前枚举的下界以上以下界为底的子矩形。显然用一个单调栈就能维护。
  • UVa 10382 因为喷水装置在中线上,所以只用考虑边界是否被完全覆盖。然后问题等价于选出若干个区间,覆盖大区间。每次选择左端点在当前覆盖的区间的且右端点坐标最大的区间。
  • UVa Live 4254 显然二分答案,每次选择$d$最小的任务执行,贪心地选择靠左的空闲时间段,用并查集维护已经被完全占用的时间段。按秩合并后可以做到$O((n + D)log D)$.。
  • UVa Live 3516  每次考虑第一次访问的子树对应的一段。如果它是第$l + r$个字符到第$k - 1$个字符,那么满足$a_l = a_k = a_r$.
  • uoj 182 在某次操作后,每个位置上的数可以表示为$frac{k_1 x + b_{1}}{k_2 x + b_2}$的形式,分离系数,对于分数部分,将它化为$c imes frac{1}{x + d}$的形式,这一部分单独求和,分别维护分子和分母的多项式,多点求值,剩下的直接算。
  • UVa Live 4123 考虑可以直接计算出这个多边形的内拐点和外拐点的数量。考虑一下能够看到每个点的范围就能够证明多边形内存在一个点能够看到所有点的充要条件是不存在连续的两个$270^{o} $拐点。考虑一首一尾的情况,剩下的直接组合数计算。
  • UVa 4119 在$x = 1, cdots, n + 1$判断是否是$D$的倍数。用逐差法很容易证明。
  • UVa Live 3704 循环矩阵做乘法时只用记录第一行。
  • UVa 11529 补集转化一下,变成求每个点在多少个三角形外部。如果画一条经过这一个点的直线,那么三个点都在同侧的三角形必定不包含它。把这条线转一圈就可以不重不漏地把每个三角形算一次。
  • UVa 10253 考虑按照串并联交替的顺序分解网络,将它转化成树的计数问题。由于叶节点个数不同的树一定不同构,可以分开考虑。每次考虑加入叶节点个数为$j$的子树,方案数可以乘上一个某个方程的非负整数解的个数。
  • bzoj 4514 设$f(x)$表示$x$写成$p_1p_2cdots p_k$的形式中的$k$,把商为质数的条件可以换成$|f(x) - f(y)| = 1$,然后就可以建二分图。二分答案跑费用流。
  • bzoj 1070 把第$i$个修车师傅拆成$n$个点,第$j$个点表示倒数第$j$个修的车。然后随便建建图就能费用流了。
  • bzoj 2597 等价于最小化不合法三元环的个数(“三元环”中存在一个点在这三个点的导出子图内入度为2就不合法),把每个人拆成两个点,中间连边,容量为1,费用依次为$in_i, in_i + 1, cdots, n - 1$,对于每个还不确定的赛局建一个点,向与它有关的两个人连边。
  • 洛古 P5108 建后缀树,dfs一遍,求每个点的子树内的后缀的最小左端点。然后扫一遍,得到答案,做完了。
  • Codeforces 1107F 对于把$k_i$用完和不用完分开处理。然后随便dp一下就行了。
  • Codeforces 1043F 显然答案低于$log_2 V$,然后简单容斥数方案数,判断一下$gcd$恰好为1的方案数模若干个质数是否是0.
  • bzoj 4596 限制可以转化成没有公司没有建边,然后可以直接容斥加矩阵树定理。对于不连通的情况可以减一下枝。
  • Codeforces 976F 把割意义转化成删掉这条边,这样对于每个点的度限制变成上界,直接跑网络流。
  • Codeforces 1009G 对于每个字母建一个点,然后每一对中有字符c建一个点,建边留作练习。
  • Codeforces 884F 直接贪心,判断能不能填这个字符用Hall定理。
  • uoj 269 用一次NTT把点值转成牛顿级数。
  • Codeforces 1141G 答案是第$k + 1$大的度数,dfs一遍就能构造了。
  • uoj 206 Subtask1每次询问边界,Subtask2,1次询问出最大值和最小值,然后答案大于等于$lfloor (mx - mi) / (n - 1) floor$,每这么多分一段,每段问一次,做完了。
  • bzoj 2154 $[i, j] = frac{ij}{(i, j)}$,枚举$(i, j)$,然后莫比乌斯反演,然后拿线性筛做一下就能$O(n)$。
  • Codeforces 757E,考虑每个素数以及素数的次幂的函数值。对于$f_{r + 1}(p^{alpha}) = sum_{k = 0}^{alpha} f_{r}(p^k)$。由于$f(p) = 2$,所以只和质数的指数有关。预处理一下就做完了。
  • loj 2126 打表发现$lfloor n/x floor$相同的$x$的$SG$函数值相等。
  • 牛客挑战赛30 D 写出答案的式子,把组合数转成路径计数,考虑不合法的路径已经会经过$y = N$。然后枚举一下是在哪第一个位置到$y = N$就行了。
  • loj 2306,考虑从后递推可以直接拿个堆贪心,不难发现第$i$天的卖菜集合是第$i + 1$的子集,再用个堆弹掉最小值就行了。
  • Codeforces 1202F 考虑一个长度合法的条件,列一堆方程,发现只用枚举$lfloor (a + b) /l floor $就可以$O(1)$计算。
  • Codeforces 1033E 怎么感觉就是uoj新年场T2换了个操作。可以通过简单分治找到任意一个生成树,然后就能做了。
  • loj 2072 树Hash模板题。
  • Codeforces 1205C 所有$i + j$为奇数的位置可以问出来,剩下可以确定相等和不等关系,然后只有2种情况。找一个$3 imes 3$并且满足左上右下的数已经确定且不同的格子直接找一个两种情况答案不同的问题问。
  • Codeforces 1207E 一次确定前7位,一次确定后7位。
  • poj 3281 S $ ightarrow$ 食物 $ ightarrow$ 牛 $ ightarrow$ 饮料
  • Gym 100273A 这个问题等价于求最小权完美匹配。
  • luogu P1954 第一问等于使限制小的尽量靠前,经典贪心 + 拓扑序问题。第二问瞎搞搞就行了。
  • luogu P4404 超过大小的时候,把后继最大的弹掉就行了。
  • loj 2221 维护凸函数即可。发现这个凸函数极其地简单。
  • loj 6673 集合幂级数求 ln 模板题。
  • Codeforces 1183G2 预处理 $x$ 个黑球和 $y$ 个白球拼成 $z$ 个段的方案数。直接背包合并复杂度会炸,用点小技巧把第一次背包合并去掉,第二次只用求出最终为 $T$ 的方案数。
  • bzoj 4883 每行每列建一个点,求最小环套树生成森林即可。
  • Codeforces 1239B,如果和为 0 直接判掉,否则答案等于前缀和的最小值个数。发现操作一定是交换一对 (),讨论一下让前缀最小值减少了 1 还是没有减少。
  • uoj 61,问题可以转化成 $d = 0$ 的情形,然后是基础反演。注意判断无解的情况。
原文地址:https://www.cnblogs.com/yyf0309/p/9919032.html