摘要:
超级传送门 题目描述: 晨晨在纸上写了一个长度为N的非负整数序列{ai}。对于这个序列的一个连续子序列{al,al+1,…,ar}晨晨可以求出其中所有数异或的结果 alxoral+1xor...xorar其 中xor表示位异或运算,对应C、C++、 Java等语言中的^运算。小璐提出了M个询问,每个 阅读全文
摘要:
传送门 在看大佬的代码时候遇到了unique函数以及二分查找的lower_bound和upper_bound函数,所以写这篇文章来记录以备复习。 unique函数 在STL中unique函数是一个去重函数, unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重 阅读全文
摘要:
一、巴什博奕: 只有一堆n个物品,两个人轮流从中取物,规定每次最少取一个,最多取m个,最后取光者为胜。 结论: 见代码 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #defin 阅读全文
摘要:
sub[ ]代表子串,str[ ]代表原串,next[ ]代表当sub[i] != str[j]时,子串需要跳到的地方,实现代码如下: 获取next数组的代码: 1 void GetNext()//求子串中的相同的真前缀和真后缀 2 { 3 memset(next, 0, sizeof(next)) 阅读全文
摘要:
原理: 举个例子来说明康拓展开的应用: 已知1,2,3,4,5五个数的全排列,给出一个排列34152,问该排列在全排列中是第几个。而康托展开的值就是这个排名。 首位是3,比它小而且没有出现过的数有1,2两个,所以为 2 * 4!; 第二位是4,比它小而且没有出现过的数有1,2两个,所以值为 2 * 阅读全文
摘要:
用树状数组,在存数据的时候下标应该是从1开始的; 再求区间的和的时候和前缀和一样开始的下标是要减一的; toSum(int x)中再求前缀和的时候是倒着向前走的; 树状数组讲解:http://www.cnblogs.com/jinkun113/p/4725420.html ORZorzorz一看就明 阅读全文
摘要:
查找该字符串是不是已经出现过 1 //在给出的字符串中查找当前字符串是否出现过 2 #include <iostream> 3 #include <cstring> 4 #include <algorithm> 5 #include <cstdio> 6 #include <cmath> 7 #in 阅读全文
摘要:
自己对Dijstra算法的理解是: 首先输入保存点,边的权值(注意无向图和有向图在保存时的区别)。 将表示从起点st到顶点 i 的距离的d[ i ]数组的每一个值初始化为INF,令d[st] = 0。 遍历d[ ]数组的下标 i (即顶点 i)这个操作是通过优先队列来实现的,然后遍历以顶点 i 为起 阅读全文
摘要:
可以求得任意两点之间的最短路问题 1 int d[maxn][maxn];//d[st][en]表示边e = {u,v}的权值(不存在时设为INF,d[i][j] = 0) 2 int V;//顶点的个数 3 4 void Floyd() 5 { 6 for(int k = 0; k < V; k+ 阅读全文
摘要:
自己对拓扑排序的理解: 例如:安排一些课程的顺序,这些课程有的可以放在一个学期内授课,而有的则有先后顺序,则可以通过拓扑排序来完成这个排序。 有序无环图(DAG)才能进行拓扑排序。 从图中找出没有入度顶点,存入答案序列中,并将以该点为起点的边从图中删掉。知道找完所有的点为止。 图例:(从左往右看) 阅读全文