编程要点随记
大小堆
#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<<"没找到\n";
}
return 0;
}
快速求和
#include <numeric.h> int sum = accumulate(vec.begin() , vec.end() , 0);
大数
long long型,__int64
输出用lld
负数二进制
正数取反再加一
欧拉图
对有向图,所有节点的入度等于出度
排列组合关系计算
排列可重复

排列不可重复

三角形面积计算
待更新
点到线的距离计算
待更新

浙公网安备 33010602011771号