zoukankan      html  css  js  c++  java
  • 水题记录

    众所周知

    水题就是我这种蒟蒻做不出来的题

    注:夹杂着口胡,请慎重食用

    hihocoder1751:

    蒟蒻的想法:枚举$i$在第$j$位的贡献,即$sumlimits_{i} sumlimits_{j} inom{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!$后再划分即可

    最终式子$sumlimits_{j} (n - j - 1) * a! * b! * inom{b - 1}{j - 1} * inom{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$个相同的串的方案数,然后转移一下即可

  • 相关阅读:
    LAB8 android
    python3速查参考- python基础 1 -> python版本选择+第一个小程序
    selenium三种断言以及异常类型
    selenium+java:获取列表中的值
    selenium测试(Java)--元素操作(五)
    redhat网卡设置
    PYTHON TDD学习(一)-->Python 3.4版本环境安装Django及其启动
    渗透测试
    实用--功能测试方法与实际测试内容
    SQL常见面试题(学生表_课程表_总表)
  • 原文地址:https://www.cnblogs.com/reverymoon/p/9911238.html
Copyright © 2011-2022 走看看