大小堆
#include <vector>
#include <list>
#include <algorithm>
make_heap(m.begin(), m.end(), less<int>());//创建大堆,最大的在第一个(greater是小堆)
如果新push_back以后(或者一开始就是用push_back),那可以调用一下这句
push_heap(m.begin(), m.end(), less<int>())
如果要取出第一个:
push_heap(m.begin(), m.end(), less<int>());//这样第一个就会被放到最后,再调用pop_back出来就好了
c++转字符串
<string>
string=to_string(xxx)
分治
大问题分解成小问题
递归
注意递归边界条件
字符串比较
strcmp,一样为0
排序函数调用,sort函数调用
遇到容器用迭代器begin和end
#include <algorithm> struct data{ int a; int b; int val; }; bool comp(data a,data b){ return a.a*a.b>b.a*b.b; } sort(datas,datas+10,comp);
内存初始化
#include <cstring> memset(str, 0, sizeof(str));
用数组当作队列简便使用
二维字符串输入
char s[N][N] for(int i=0;i<n;i++){ cin>>s[i]; }
方向数组
int zan[4][2]={1,0,0,1,-1,0,0,-1}; int go[2][8]={{-1,0,1,-1,1,-1,0,1},{-1,-1,-1,0,0,1,1,1}};
map的使用
#include<map> #include<iostream> #include <string> using namespace std; map<int,string>m; int main(){ m[1]="111"; m[2]="222"; map<int,string>::iterator m_i; m_i=m.find(1); if(m_i!=m.end()){ cout<<m_i->second<<endl; cout<<m[1]<<endl; } m.erase(m_i); m_i=m.find(1); if(m_i==m.end()){ cout<<"没找到 "; } return 0; }
快速求和
#include <numeric.h> int sum = accumulate(vec.begin() , vec.end() , 0);
大数
long long型,__int64
输出用lld
负数二进制
正数取反再加一
欧拉图
对有向图,所有节点的入度等于出度
排列组合关系计算
排列可重复
排列不可重复
三角形面积计算
待更新
点到线的距离计算
待更新