正数的补码就是它负数的二进制
滑动窗口
树状数组(n皇后)(在二进制中,44到-44:二进制取反+1)
二分(整数二分,浮点数二分)
全排序:
好数组的求法(数组元素数等于元素之和)
kmp(模板+理解)
关于map:map<p(结构体),ll> m,这样子如果未赋值,直接用是非法的;但是map<int,int>却能默认为0(如果想写二维数组,map<int,map<int,int>> m嵌套即可
对于sort自动排序,默认为升序(从小到大),但是构建cmp如何呢
struct p{ll a,b;}; bool cmp(p v,p c){ return v.a<c.a; }(升序cmp)返回值即所需排序
万能头文件中,y1被定义过,所以y1不能用做全局变量
gcd(裴蜀定理) 有点抽象,而且不常见,可以去错题找找再看一下(计数器)
gcd函数,求最大公约数
乘法逆元(exgcd) 同余方程及其应用
费马小定理 a的p-1次方≡1(mod p) 1到n的平方和 :n*(2*n+1)*(n+1)*6^(p-2)
函数substr s.substr(截取的字符串在s中最先出现的位置,截取字符串的长度)
当变量超过了定义类型的范围时,会使正数变为负数
array<type,num> 的使用,可以直接生成数组,也可以用于vector<array<int , 4(必须是一个确定的常数,不能是变量)>>等
卡特兰数 递推求取
unique(a.begin(),a.end()) 会使有序数组a 将重复的元素滞后
但是配合上了erase:a.erase(unique(a.begin(),a.end()),a.end);能够将重复元素消除
由于多组样例,有时候直接在每组t里开数组或者map或者memset清零会导致直接超时,
可以在外开数组,然后直接每次从1到n 用for清零
任意的一个数字A=p1^k1*p2*k2*....pn^kn 则有这个数的约数之和(p1+p1*2+..+p1*k1)*(p2......)
与此同时, 1到A与A互质的数的个数A*(p1-1)/p1*(p2-1)/p2....(pn-1)/pn
费马定理 当p为素数,并且gcd(a,p)=1时,有a^(p-1)≡1(mod p)
getline(cin,s)读取一行
可以用set<int> s(a.begin()+num,a.begin()+numm) 将 下标从num到numm的vector数组存进set
multiset与set区别,set的insert只能对一个值一次,multiset能有多次具体可查以下链接
同时multiset中的lower_bound返回迭代器,可以用auto定义
继续补充捏 (忘了,看到了再记一次)