1. 加快cin
和cout
的速度
ios::sync_with_stdio(false);
2.文本替换
define
如:#define ll long long表示用ll
代替long long
,这样在写代码是就可以简便很多。
3.STL
- set
可以用来储存数据,并且可以自动排序,可以自主设计排序方式,默认从小到大排序并去除重复的数据;
定义:set<数据类型>定义的变量名;
操作:1.只能通过迭代器进行访问。set<定义的数据类型>::iterator 变量名=定义的变量名.begin();
2.清空所有元素。定义的变量名.clear();
3.找到某个元素的地址。定义的变量名.find(要找的元素);
时间复杂度:O(logn)
4.插入一个元素。定义的变量名.insert(要插入的元素);
5.获得其中元素的个数。定义的变量名.size();
6.删除某个元素。定义的变量名.erase(要删除的元素);
7.删除一个区间内的所有元素。定义的变量名.erase(first,last);
first为所需要删除区间的第一个迭代器,last为所需要删除区间的最后一个迭代器的下一个地址。
8.判断定义的set是否为空。定义的变量名.empty();
若为空则返回ture
。
lower_bound(要找的元素);
返回第一个大于等于要找的元素的迭代器。
upper_bound(要找的元素);
返回第一个大于要找的元素的迭代器。
- multiset
与set相似,不同点在于priorityset可以放入相同的数据元素;操作相同,不再赘述。
-
map
为一个关联容器,类似于数组,不过下标可以自己定义类型。
定义:map<key,value>x;
key可以看做数组的下标类型,value可以看做数组中的元素类型,x为自定义的变量名。
操作:
1.四种插入方法:
利用pair:x.insert(pair<key,value>(要插入的key类型数据 , 要插入的value类型数据));
利用make_pair:x.insert(make_pair(要插入的key类型数据 , 要插入的value类型数据));
利用value_type :x.insert(map<int, string>::value_type(要插入的key类型数据 , 要插入的value类型数据));
直接数组方式插入:x[要插入的key类型数据]=要插入的value类型数据;
2.查找:用迭代器遍历。map<key , value>::iterator it=x.begin();
it为自定义的变量名。
访问key值:it->first;
访问value值:it->second;
3.x.count(指定元素);
返回指定元素出现的次数。
4.获得其中元素的个数。定义的变量名.size();
5.删除某个元素。定义的变量名.erase(要删除的元素);
6.删除一个区间内的所有元素。定义的变量名.erase(first,last);
first为所需要删除区间的第一个迭代器,last为所需要删除区间的最后一个迭代器的下一个地址。
7.判断定义的set是否为空。定义的变量名.empty();
若为空则返回ture
。 -
multimap
与map相似,不同点在于priorityset可以放入相同的数据元素;操作相同,不再赘述。 -
vector
相当于数组的容器。
1.能通过迭代器进行访问。set<定义的数据类型>::iterator 变量名=定义的变量名.begin();
也可以像数组一样使用。
2.清空所有元素。定义的变量名.clear();
3.找到某个元素的地址。定义的变量名.find(要找的元素);
时间复杂度:O(logn)
4.插入一个元素。定义的变量名.insert(要插入的元素);
插入到尾部。定义的变量名.push_back(要插入的元素);
5.获得其中元素的个数。定义的变量名.size();
6.删除某个元素。定义的变量名.erase(要删除的元素);
7.删除一个区间内的所有元素。定义的变量名.erase(first,last);
first为所需要删除区间的第一个迭代器,last为所需要删除区间的最后一个迭代器的下一个地址。
8.判断定义的set是否为空。定义的变量名.empty();
若为空则返回ture
。 -
priority_queue
priority_queue的本质是堆。
1.empty() 如果优先队列为空,则返回ture。
2.pop() 删除第一个元素 。
3.push() 加入一个元素 。
4.size() 返回优先队列中元素的个数 。
5.top() 返回优先队列中有最高优先级的元素即最大的那个元素。
贪心算法
局部最优得到整体最优。
贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅是在某种意义上的局部最优解。用局部解构造全局解,即从问题的某一个初始解逐步逼近给定的目标,以尽可能快的求得更好的解。当某个算法中的某一步不能再继续前进时,停止。