随笔分类 - 数据结构
并查集,树状数组,优先队列,RMQ。。。
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 并查集入门题。最近在学并查集,它无非包括三个操作:make_set(x)、union_set(x, y)和find_set(x)。make_set(x)的作用是使得每一个成员x自成一个只包含x的集合。union_set(x, y)的作用是使x和y合并成为一个新的集合,确定x和y的连通性。 find_set(x)则是查找到x的祖先,这里用set[i]表示元素 i 的祖先,换句话说就是,包含x的集合(唯一)的代表,当然这个代表是集合中的某个成员。对于如何选择代表要具体问题具体分析,但是要注意,如
阅读全文
摘要:题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1654题意:简单的理解就是,把一个序列中相邻的且是偶数个相同的字符删除,奇数个的话就只保留一个。但是要注意,删除的过程中,可能会导致本来不相邻的相同字符变得相邻了,这时候也要删除。如果直接暴力:每次查看串中是否有相同的相邻字母,如果有就删去,然后继续从前向后查找,这样肯定会超时(O(N^2))。 优化的方法,利用栈的特殊结构O(N),从左向右扫描,判断当前的字符和栈顶元素是否相同,如果相同栈顶元素出栈,否则的话将这一位的元素入栈,这样线性地扫描一遍后,栈中的元素就是剩下的串。要注意输出
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022 又是一道栈的练习,这次也是没有用到STL中的栈来实现。用来保存操作过程的数组(process[])一定要开得足够大(一开始开小了导致wa) 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int maxn = 10; 7 int main() 8 { 9 char o1[maxn], o2[maxn], stack[maxn]; 10 int i, j, n, a, b, k, pro...
阅读全文

浙公网安备 33010602011771号