zoukankan      html  css  js  c++  java
  • trick点

    1、问题里有取模操作的时候,最后输出(ans+mod)%mod

    2、涉及到输出实数0的时候要特判输出的会不是是-0.000000(因为0.00乘一个负的浮点数结果是-0.000000,乘一个正的浮点数结果是0.000000)

    3、遇见问题中有|x-c|,min(x,c-x),max(x,c-x)的时候,考虑分类讨论其贡献,一般一个位置都答案的贡献只会分成两段,这个分界线可能是常数,也有可能是一个式子。如果是式子的时候,要尤其注意:比如k<=f(x)时,贡献是a,k>f(x)时,贡献是b,那么f(x)在变动的时候,要考虑f(x)<0,f(x)>n的情况,这时候一般都是和下界取max,和上界取min,要让k有意义。

    4、概率dp的时候,有概率和期望两种,尽可能使用概率去做,用期望做的话,加的权值有可能会出错,期望dp加一个权值时候,不能直接加,要乘上这个权值的发生概率

      即f[u]表示概率,g[u]表示期望

      那么f[u]=Σf[v]

      但g[u]=Σg[v] + value[u] * f[u]   (注意千万不能写成g[u]=Σg[v] + value[u] )

      其实如果要求期望,可以dp它的概率,最后求期望

      即E=Σf(i)*value[i] = Σg(i)

    5、比如求dp[i]=min(dp[j]*a[j]*b[j]),最后结果对mod取模,不能写成dp[i]=min(dp[j]*a[j]%mod*b[j]%mod),因为中间有个取min操作,取min操作是不支持的取模的

    6、Trie树边对应的信息放在下面的点上;Trie树也可以存数字,也是个有序的数据结构,要注意多个数字重复的情况,可能走到叶子节点的路程上对ans没有贡献,要最后判断叠加;Trie树可以支持整体异或,具体的就是询问的时候如果遇到某位是1,那么就swap(lchild,rchild)就行了

    7、要注意无意义的清零和无意义的反复求字符串长度,这样可能会带来超时

    8、分解质因数最后留下的可能不是1,是个大素数

    9、区间筛的时候要注意r-l<=1e6,那么其实中间有1e6+1个数

    10、将double类型的数字以int输出时:printf("%d",(int)(number+0.5));

    11、遇见多组数据一定要记得检查有没有清空干净(如Trie树自动机什么),有时候甚至会导致MLE!!!

    12、数组开小可能会导致TLE

    13、cdq分治排序的之后注意坐标一样时,要比较操作类型,一般的修改操作在查询操作前面

    14、遇见分组计数的问题记得考虑meet in middle

    15、多次FFT、NTT的时候要记得将A[n..len]清0

    16、二分分数区间$[frac {a} {b},frac {c} {d}]$的时候,$mid=frac {a+c} {b+d}$

    17、当遇到要计算$frac {p_1+p_2+p_3+...+p_n} {q}$的值的时候,保证结果不超过$2^63$,分母q不超过$2^30$,这样计算就有个问题,就是分子相加的时候会爆long long,有个技巧就是$ans=lfloor frac{ans}{q} floor  *q+ans \, mod \, q$所以可以记录整除数和余数,这样就不会超过longlong了

    18、若干个0和若干个1(1存在)能异或出的2^n个结果中,一定有一半是1,一半是0

    19、计算几何一直WA也许不是精度的问题,而是因为小数据边界没有特判

    20、==、!=的优先级要高于位运算(包括^),所以位运算要打括号

    21、莫队算法的时候记得先移r再移l,否则可能会有的数字出现次数为负数带来数组越界

    22、分层图最短路在外面把图先建好,后面直接跑最短路

    23、树链剖分处理边权的时候尤其要注意,向上爬到最后,lca的点权不能要

    24、处理可撤销并查集时候所用的按秩合并并查集在find的时候不能维护其它信息,其它信息必须另开一个函数get_val()用log(n)的时间求出来

    25、当数据量很大的时候注意减少容器和递归的使用

    26、当结果对1e9+7取模的时候,一般可以直接用int去做,但是如果数据范围是[-1e9,1e9]那就要小心了,可能会爆掉

    27、一个都是整数的数列经过ufwt形成的变化中的数不一定都是整数(因为有/2操作),可以认为并没有一个整数数列对应的fwt的结果是这个数列,要注意。但是如果是fwt(a),fwt(b),a=a*b,ufwt(a),那样是没问题,因为一定有解。

    28、数组开大大容易超时,能滚动数组就滚动数组,比如决策单调性优化dp

    29、在区间赋值的线段树里,注意tag=0的意思是给区间全部赋为0,而不是没有标记

    30、取整数部分用floor,而不要用(int)

  • 相关阅读:
    机械奥妙
    双向可控硅
    开关电源
    阻容降压电路
    手机充电电源的电路原理
    运算放大电路
    剃须刀电路
    d039: 点的位置
    d029: 求出2-100之间的所有质数(素数)
    d023: 各位数字之和
  • 原文地址:https://www.cnblogs.com/wmrv587/p/6913869.html
Copyright © 2011-2022 走看看