从进队到现在,师哥们陆陆续续讲了很多基础算法,对我这种菜鸡而言没有什么基础,感觉都挺难的,所以还是复习复习,看看还有多少没还给师哥的。。。
上课的内容大致有以下几个模块(C语言基础和python姑且不算)
1. STL
2. DFS + BFS
3. 并查集
4. 快速幂 + 欧几里得算法
1.STL之vector
把搜到关于vector的基本知识点列一下
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针
5.end 得到数组的最后一个单元+1的指针
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据
vector c.
c.clear() 移除容器中所有数据。
c.empty() 判断容器是否为空。
c.erase(pos) 删除pos位置的数据
c.erase(beg,end) 删除[beg,end)区间的数据
c.front() 传回第一个数据。
c.insert(pos,elem) 在pos位置插入一个elem拷贝
c.pop_back() 删除最后一个数据。
c.push_back(elem) 在尾部加入一个数据。
c.resize(num) 重新设置该容器的大小
c.size() 回容器中实际数据的个数。
c.begin() 返回指向容器第一个元素的迭代器
c.end() 返回指向容器最后一个元素的迭代器
关于vector的用法我只能算了解,以后多做题多积累
这里挂一道oj上刚做的题
sdnu 1057 树的查询
Description
给定 n(1 <= n <= 1000000), m(1 <= m <= 10) 分别表示一棵树中节点的个数及查询的数量,每个节点的编号为给定的顺序,之后给定每个节点的父节点编号,及 m 个查询,每个查询中,给定一个节点编号,对于每个查询,按编号从小到大输出该节点所有子节点。
Input
第一行两个整数n, m,之后n行,每行两个整数a, b,表示编号为a的节点的父节点是b,b为0表示没有父节点,数据保证编号为1至n的节点均在a位置出现一次,之后一行m个整数,表示每个查询要查询的节点编号。
Output
m行,每行若干个从小到大排好序的、用一个空格隔开的整数,表示该次查询的节点的所有子节点。
Sample Input
5 1
1 0
4 1
2 1
5 1
3 1
1
Sam Output
2 3 4 5
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
vector<int>v[1010010];
int main()
{
int n,m;
int a,b;
int first;
scanf("%d%d",&n,&m);
for(int i = 0; i < n; i ++)
{
cin>>a>>b;
if(b == 0)continue;
v[b].push_back(a);
}
while(m--)
{
cin>>a;
first = 1;
for(int j = 0; j < v[a].size(); j ++)
sort(v[a].begin(),v[a].end());
for(int j = 0; j < v[a].size(); j ++)
{
if(first == 1)
{
cout<<v[a][j];
first = 0;
continue;
}
cout<<' '<<v[a][j];
}
cout<<endl;
}
return 0;
}
都是基础用法就不解释了,很水。
这算复习完vector?那接下来stack,map,queue就不一个一个找题了,和vector有很多共性,一定要多积累。
SET基本操作:
begin() ,返回set容器的第一个元素
end() ,返回set容器的最后一个元素
clear() ,删除set容器中的所有的元素
empty() ,判断set容器是否为空
max_size() ,返回set容器可能包含的元素最大个数
size() ,返回当前set容器中的元素个数
rbegin ,返回的值和end()相同
rend() ,返回的值和rbegin()相同
QUEUE基本操作:
back()返回最后一个元素
empty()如果队列空则返回真
front()返回第一个元素
pop()删除第一个元素
push()在末尾加入一个元素
size()返回队列中元素的个数
queue入队,如例:q.push(x); 将x 接到队列的末端。
queue出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问queue队首元素,如例:q.front(),即最早被压入队列的元素。
访问queue队尾元素,如例:q.back(),即最后被压入队列的元素。
判断queue队列空,如例:q.empty(),当队列空时,返回true。
访问队列中的元素个数,如例:q.size()
STACK基本操作
stack 的基本操作有:
入栈,如例:s.push(x);
出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。
访问栈顶,如例:s.top()
判断栈空,如例:s.empty(),当栈空时,返回true。
访问栈中的元素个数,如例ÿ