[置顶] [一直更新中]错误及好东西

犯错合集

1、在一个地图求最大面积的类问题中,要注意障碍结点的影响。
2、ll(),表示的是在运算后把括号内强制转化为类型ll,而(ll)表示后面的每个玩意都强制转化为类型ll。在做历史研究这道题时我WA就是因为我用的是ll()而不是(ll)。
3、莫队算法初始时应该是l=r=1(不能设为0)
4、splay每次splay操作后一定要记得更新root!
5、可以使用树状数组就尽量不要使用线段树。在Gty的文艺妹子序列这道题本机测试极限数据,线段树15s而树状数组4s,差距真大。
6、不需要开long long的就不要开long long。
7、分块算法,一定要特判两个端点之间没有跨过任意整一块的情况。
8、建广义SAM时,如果采用离线做法,为了递推size而进行的排序还要以编号为第二关键字(第二关键字按照从大到小)。
9、使用问号语句记得括号,不然会出错例如:

(ll)dp[i-1]*i%mo+(i%2)?-1:1

得到的值只有-1或1。
正确打法:

(ll)dp[i-1]*i%mo+((i%2)?-1:1)

需要注意的东西

1、不要主观臆断认为一个算法会TLE。

各种有用的东西、黑科技、技巧

1、整体二分及cdq分治实现时,每个区间不需要单独开队列。可以把操作弄到一个数组了,然后多两个参u、v表示这个区间的操作在u~v,做完后对每个操作打标记表示是否往右区间传即可。
2、两个long long相乘取模怎么办?
第一种是快速乘,类似快速幂,复杂度多了个log
第二种是找一个比较小的数,然后搞一波,详见代码

ll qsc(ll x,ll y){
    ll a1=x/1000000,a2=x%1000000,b1=y/1000000,b2=y%1000000;
    ll t=a1*b1%p*1000000%p*1000000%p;
    t=(t+a2*b2%p);
    t=(t+a1*b2%p*1000000%p);
    t=(t+a2*b1%p*1000000%p);
    return t%p;
}

第三种来自Yves___的博客long long相乘取模黑科技

LL mult( LL A, LL B, LL Mo )
{
    LL temp = ( ( LL ) ( ( db ) A*B/Mo+1e-6 ) * Mo );
    return A*B - temp;
}

大概意思就是强制转double然后搞一波再转回来。
3、unique()可以删除重复元素,然后返回删除重复元素后的末端地址。
下面这段代码即可实现离散化。

fo(i,1,n) scanf("%d",&a[i]),b[i]=a[i];
    sort(b+1,b+n+1);
    l=unique(b+1,b+n+1)-b-1;
    fo(i,1,n) a[i]=lower_bound(b+1,b+l+1,a[i])-b;

4、可以用调用ctime,运用clock()获取程序运行至该语句时的时间(默认ms)

#include<iostream>
#include<ctime>
using namespace std;

int main()
{
    int n=0;
    //start=clock();
    while(n<100000000)
        n++;
    cout<<(double)clock()<<endl;
    return 0;
}

5、调用头文件bits/stdc++.h就相当于包括了好多库……
6、如何打伪随机数?

int rand() {
    static int rand_seed=1542071823;
    rand_seed+=rand_seed<<1|1;
    return rand_seed;
}

7、对拍(从前一直用c++对拍的蒟蒻就是我)

在程序的目录下建立.txt文件,输入:

@echo off
:loop
data.exe //生成数据
right.exe //要对拍的
brute_force.exe //暴力
fc data1.out data2.out //两个程序的输出文件
if not errorlevel 1 goto loop
pause
goto loop

把文件扩展名名改成.bat

8、关于可持久化,记住以下几点:
1:一个点的信息要被修改时需要对其新建。
为了节省空间,一个点的信息不被修改时就没必要新建了。
例如合并一个结点与空节点,此时不需要新建。
2:为了节省空间,如果对空节点进行newnode我们直接返回空节点。
3:打标记也涉及修改信息,不要忘记newnode。而down的时候其实并不用,因为修改的是儿子的信息。
9、从OJ上看来一句话,不知道来源。
OI比赛的题目无非三种,从暴力到优化,从一般到特殊,重新定义题目。
10、 FFT/NTT做题方法与调试技巧(+提高码题效率的一些想法)
来自链接

你可能感兴趣的:([置顶] [一直更新中]错误及好东西)