众所周知
水题就是我这种蒟蒻做不出来的题
注:夹杂着口胡,请慎重食用
hihocoder1751:
蒟蒻的想法:枚举$i$在第$j$位的贡献,即$\sum\limits_{i} \sum\limits_{j} \binom{i - 1}{j - 1} * (j - 1)! * (n - j)!$
然而并不能优化到$O(n)$
考虑从大到小插入数,那么插入$i$时,有$(i - 1)! * n^{\underline{i}}$的贡献
即$\sum (i - 1)! * n^{\underline{i}}$
化简后为$n! \sum \frac{1}{i}$
hihocoder1750:$r - l \leq 10^6$,对$[l, r]$内的所有数进行试除,暴力判断因子个数即可
hihocoder1746:分$a$是不是$b$的祖先判断一下,然后取去除$a, b$端的子树相乘即可
hihocoder1743:状压$2^k$然后套个矩阵快速幂即可
hihocoder1738:线段树优化建图后拓扑图dp
hihocoder1730:并查集维护相同,set维护不同,启发式合并set
hihocoder1726:二分找到答案所在的间隙后,加加减减输出即可
hihocoder1722:
考虑two-pointer,维护最小值和最大值指针,随着最小值指针的递增,那么最大值指针也会递增
可以在$O(nm)$的时间内维护每行中有多少个数出现,然后更新即可
hihocoder1718:把要求的序列分为3段去dp,转移时用线段树优化即可
hihocoder1714:设$f[i][0 / 1]$表示第$i$个来了或者没来的最大酒量,然后去dp
hihocoder1711:
发现两个评论框只要撞到了一起,那么久永远在一起了,并且一个评论框只会被撞一次
我们可以用带权并查集维护一个联通块内的距离,用set维护全局的联通块
hihocoder1710:拿线段树直接维护左右最长等差连续子序列和公差即可
hihocoder1706:
$f[i][j]$表示选出$i$个数,其中有$j$个2没有匹配时,某尾最多有几个零
相应地有$g[i][j]$表示有$j$个5没有匹配,转移时注意一下即可
hihocoder1703:
中序遍历:左中右,前序遍历:中左右
实际上确定字典序的过程相当于枚举根,枚举根后只要确定左右的不同的二叉树的形态,这是两个卡特兰数相乘
然后每一位慢慢确定就行
hihocoder1702:定义$f[x][y][k][0 / 1]$,为到$(x, y)$时,转了$k$次弯,现在向右还是向下走的最小代价,然后转移即可
hihocoder1698:
枚举刷了几天的题,之后为了保证顺序,乘上$a! * b!$后再划分即可
最终式子$\sum\limits_{j} (n - j - 1) * a! * b! * \binom{b - 1}{j - 1} * \binom{a - 1}{n - j - 1}$
(没有细算,弄错了不要怪我
hihocoder1695:
先写个爆搜打个表,然后OEIS一下就可以发现规律
顺便膜一波证明:orz
hihocoder1693:
$i < j$,$A_i > A_j$,枚举数位一个维,三维问题,$O(n \log^2 n)$解决
有没有更优美的解法呢?
hihocoder1692:
看着很迷,然而很简单
先枚举分母是谁,之后对每个分母判断离$k$最近的分子是谁,复杂度$O(n^2 \log k)$
hihocoder1689:
先二分一个答案$v$
把$v$之前的边建出来后,看下能不能从$1$走到$n$或者从$n$走到$1$
hihocoder1685:
先枚举上边界和下边界,之后问题转化为1维问题
即求最大的$j - i + 1$使得$s[j] - s[i - 1] >= 0$,这个可以从左往右扫带个树状数组解决
复杂度$O(n^3 \log n)$,hihocoder机子跑得快...
hihocoder1684:一个很裸的最长下降子序列
hihocoder1680:
真乱搞题.....直接确定出是落在每一层的哪个字母更新下来的区间中
往下转移的时候,由于一个字母最多变3个,暴力一下就好了....
hihocoder1677:平衡树裸题
hihocoder1673:
看起来就很套路....如果一个2 * 2的小矩阵都01间隔,那么给左上角赋值1
用悬线法做最大子矩阵即可,一些细节再判一下,复杂度$O(nm)$
hihocoder1672:
先把所有的包含区间去掉
那么我们一定会形成一个随着左端点递增,右端点递增的区间组
然后从头开始放整数,只需要放开头和结尾
hihocoder1665:需要一个支持区间查最大值和区间覆盖(值域递增)的数据结构,线段树即可
hihocoder1664:最大子矩阵和最大子正方形有什么区别呢?所以同1873
hihocoder1660:计算几何???
hichocoder1656:
某弱的做法:如果查询串为$(S, T)$,即查询前缀$S$和后缀$T$,那么转化为$S$ + # + $rev(T)$,其中$rev(T)$为$T$的反串
插入的时候,把一个串$S$,分成$|S|$个前缀$+ $# $+ rev(S)$,然后查询即可
复杂度$O(100 * n + 10 * m)$
空间复杂度$O(26 * 20 * 100 * n)$
另一种做法:考虑把所有的串和反串插入$Trie$树
那么,询问$(S, T)$在树上可以对应两个节点$(x, y)$
树上有答案的节点对只有$n * 10 * 10$个,我们可以直接预处理出来,用$set$存着
每次询问只需在树上匹配,然后调用$set$的值即可
可以考虑把$set$换成$hash$,复杂度能做到,时间$O(10 * 10 * n)$,空间$O(10 * 10 * n)$
hihocoder1655:
先二分一个答案$v$,考虑怎么判断
也就是求$\sum [gcd(i, n) = 1]$
对其莫比乌斯反演,得到$\sum [d | n] \mu(d) * \frac{m}{d}$
可以得到$n$的质因子后套用上式计算
复杂度$O(\sqrt {n} \log n)$
hihocoder1652:咕咕咕咕咕咕咕咕
hihocoder1651:令$f[i][j]$表示$dp$到了第$i$位时,前面一共有$j$个相同的串的方案数,然后转移一下即可
来源:https://www.cnblogs.com/reverymoon/p/9911238.html