问题注意QWQ

本文讨论了在编程和数学问题中遇到的关键技术,如取整对循环结束的影响,使用并查集和集合优化,特殊数值处理,区间问题的离散化方法,以及如何通过决策顺序、哈希和数据结构(如链表、Spfabfs和主席树)来解决复杂问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 进行除法,向下取整对判断是否有影响,(上取整(x+(y-1))/y)
  2. 进行contine,是否影响循环结束,错过部分代码运行
  3. 只要不是下标,变量全为long,用下标进行运算时转换格式为long
  4. 给定值的大小关系是否明确
  5. 并查集缩点时,不能边缩点边建边
  6. 自定义排序,注意多元组等于时顺序是否有影响
  7. mex,可以考虑用集合存数组中缺少的数,由于结果一定小于n+1,所以集合大小不会超过n的数量级
  8. 带有绝对值的式子,求最小,排序后会前后相消只留下首尾
  9. 取模,保证每一步都要模,若做减法要补模数
  10. (2^{30}-1)\&(a|b),(2^{30}-1)\&(a|c),(2^{30}-1)\&(a|d),\cdots可以得到满足或条件的a
  11. dfs到1e6要改线程防止爆栈
  12. 正着不好进行决策考虑倒着,一般是在倒着决策的情况下可以将问题转为前面剩下部分的子问题
  13. 乘法运算,可以考虑转为累加
  14. 当数据很大但是总共为n个且是离散的,可以考虑离散化,例如区间端点
  15. 当要枚举区间端点才能得到结果时,看能否通过移项使等式一端只跟区间左端点或右端点有关,之后放入set,查表有一样的则满足等式,例:o[r]-o[l-1]=p[r]-p[l-1]\Rightarrow o[r]-p[r]=o[l-1]-p[l-1]
  16. 对于数学问题,可以试着枚举下数看能不能缩小范围
  17. 先想暴力,不要上来找规律,关注数据范围很小的变量
  18. 具有周期性质,考虑lcm
  19. 先考虑特殊情况,某些值为0,考虑简单版的题目,然后再考虑不为0的情况
  20. 对于决策存在一个最优的顺序,但数据很小,可以用状压枚举所有顺序,最优一定包含
  21. 进行swap后要看是否答案有顺序要求,记得还原
  22. 对于数组有删除插入,知道数组最大长度,用链表模拟,链表上无法二分,只能从头扫到目标点
  23. a-b \ is\ facotr\ of\ a^n-b^n
  24. TreeMapkey升序排序,而不是value,自定义也是对Key
  25. 去重不影响结果,用Hashset/Treeset,替代Vector防超时,Set<Integer>[]\ hs=new\ HasSet[n+1]
  26. 当询问很小直接做,询问很多考虑离线
  27. 累加不好处理,考虑从总和删去多余的数
  28. 操作相互抵消,考虑异或打标记传递,每次操作只向最近的影响点做标记,到了再向下传标记(如果还未被抵消)
  29. 对于矩阵上扫描,若一个点的状态会被更优的覆盖,则不用dfs,而用类Spfa bfs,保证当前进行决策的点是该点目前的最优状态,避免无效递归(再被更优的覆盖)
  30. 异或看作不进位加法,比较异或后大小,看两个数中较小数的最高位在较大数相应位的值,若为1,则变小,若为0,则变大
  31. 统计贡献时,异或操作各位之间无影响,可以对于每一位单独进行操作,看作数组值全为0/1
  32. 区间问题,看作拆为以x-1结尾的和以x+1开头的,拼接成包含x的区间
  33. 区间算贡献,对每个点进行考虑,计算有多少区间包含该点
  34. 回文串的判断也可以通过hash判断从左往右和从右往左是否相同
  35. Hash底数取29,131,模数取1e9+7,1e9+9
  36. 数组创建也需要时间,开1e7要超时,考虑将不需要的记录滚掉
  37. 负数除法会上取整
  38.  𝑎=𝑏 的要求一个想法就是:是不是 𝑎+𝑏 为定值
  39. 主席树不带修改查询第k小
  40. c++中long long 必须是两个long long 相加
  41. 在main中的数组要用memset赋初值
  42. (long long)1<<j
  43. x=k1*a1+k2*a2+k3+a3+……,判断有解,即x为gcd(a1,a2,a3……)的倍数
  44. 区间[l,r]异或和等于区间[0,l-1]^[0,r]

  45. 对于任何一个位数大于1的数,必有 𝐷(𝑛)<𝑛 (想想十进制是怎么表示数的)
    而对于位数为1的数,有 𝐷(𝑛)=𝑛
    所以只要有一个进位,就相当于一个位数为1的数变成位数大于1的数,则 𝐷(𝑘𝑛) 一定小于 
  46. ()括号字符串,将(=1,)=-1,前缀和后
    如果反转区间 [l,r][𝑙,𝑟],那么前缀会受到影响的位置就是 k∈[l,r]𝑘∈[𝑙,𝑟],下标为 k𝑘 的前缀会变成 𝑠𝑙−1−(𝑠𝑘−𝑠𝑙−1)=2⋅𝑠𝑙−1−𝑠𝑘
    反转区间内的 ( 和 ) 的数量必须相同,因此合法的右端点 k∈[l,r]𝑘∈[𝑙,𝑟] 还需要满足𝑠𝑘−𝑠𝑙−1=0
  47. 递归记忆化,若知道下一跳是谁,可以改为先得出当前一步的结果,再倒着for一遍由小累加处理 题目
  48. 组合数C(x+1,k)=C(x,k)+C(x,k-1),可以递推
  49. 字符串公共前缀,字典树
  50. 鸽巢原理,不同颜色两两配对,可以单个为一组,由小到大排序,当前组数为max(a[i],(sum+1)/2),去最长的为巢,其余往里放
  51. n*n矩阵上,曼哈顿距离,找齐所用可能的距离,取对角线上的(n-2)个点,和(n-1,n),(n,n),偶数距离为到(n,n)基数距离为到(n-1,n)
  52. 连通块,一加一减,黑白染色,dfs判断合法(访问到一个访问过的染色不冲突)
  53. 求最大值,可以将当前求得的最大值,作为下一次查找的下界,减少查找次数
  54. 树的重心,如果在树中选择某个节点并删除,这棵树将分为若干棵子树,统计子树节点数并记录最大值。取遍树上所有节点,使此最大值取到最小的节点被称为整个树的重心。树中所有点到某个点的距离和中,到重心的距离和是最小的。以树的重心为根时,所有子树的大小都不超过整棵树大小的一半。所以i,i+n/2一定在两棵子树中
  55. &|xor,二进制运算,求2^l到2^r中合法方案,前缀和相减
  56. 三角剖分,多边形有n个点,则最多划分出n-2个三角形
  57. 树的直径,先dfs找的最远的点,在以其为根dfs找最远的点
  58. 大数gcd,较大数对较小数一直做除法,若较大数为长度较大,用string读入
    for(int i=0;i<a.size();++i){
        i64 x=a[i]-'0';
        A*=10;
        A+=x;
        A%=B;
    }
  59. double结果输出用printf("%.10f",ans2 );
  60. 调用max,min,abs等数学运算,加std::快很多
  61. 正难则反,考虑总情况减去,用差得出结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值