- 博客(13)
- 资源 (9)
- 收藏
- 关注
原创 并查集变形 - 敌人
给出一些敌人的队,如a -bc -da-c给他们分成两组,那么以上就可以分为a,d一组,bc一组。但如果敌人关系是这样的:a-bc-da-cb-c则a-b-c两两为敌人,这样就分不成两组了。现在就是给出这么一堆关系,让你判断是否可以分成两组。如何应用并查集呢?思路就是,用一个数组记录敌人的关系,这样可以O(1)时间内找到敌人。(1)初始化为-1(
2013-09-29 23:18:36 1625
原创 字符串的并查集
如果输入元素不是简单整数,该怎么办呢?可以通过map和vector实现。而且只需要输入一次,边输入边进行并查集操作。 #include #include #include #include #include #include #include using namespace std;void init(int *p, int n){ for(int i=0; i
2013-09-29 22:45:42 1805
原创 并查集简单模板
并查集解决的问题很典型,就是等价类划分的问题。三个函数:void init(int *p, int n){ for(int i=0; i<n; i++) p[i] = -1;}int Find(int x, int *pn){ if(pn[x]<0) return x; return pn[x] = Find(pn[x], pn);}// 合并:大的合
2013-09-29 21:38:33 720
原创 1到n中1的个数
#include #include // 1到n中含有多少个1// 或者,1到n中含有多少个xint getN_good(int n, int x){ int i = 1; int c2=0; // 总计数 while(n >= i) // n=12345, i=100 { int c1=0; //分计数 int pre = n/(i*10)*(i*10);
2013-09-25 23:33:05 662
原创 一个球从100米高度自由落下
// 一个球从10米高度自由落下,每次落地后返回原高度的1/2,再落下// 求[1.]第n次落地时,共经过多少米;[2.]第n次反弹有多高// // 求解:[1.]公式 100+200*(1-1/2^n)// [2.]公式 100/2^n#include // 递归计算x的n次方static double _mypow(int n, doub
2013-09-24 23:38:04 7685
原创 KMP与Sunday算法
KMP的next函数有两种形式,一种是next[0]=-1的,另一种是next[0]=0的,这里采用了第二种。分两个函数写成,1.求next;2.匹配。求next和匹配的过程看上去有那么点点类似。上代码:#include #include using namespace std; void build_next(char * s,int *next) {
2013-09-21 12:28:18 1674
原创 快速排序、堆排序、归并排序
#include #include #include using namespace std;// 不重复元素,递归,全排列// 交换两个元素inline void swap(char &c1, char &c2){ char ch = c1; c1 = c2; c2 = ch;}// 全排列,考虑了重复元素,递归void allpailie(char *a, cha
2013-09-14 10:17:09 586
原创 排列组合
#include using namespace std;// 不重复元素,递归,全排列// 交换两个元素inline void swap(char &c1, char &c2){char ch = c1;c1 = c2;c2 = ch;}// 全排列,考虑了重复元素,递归void allpailie(char *a, char *p,
2013-09-13 16:44:13 521
原创 模板编程总结
1、template //template parameter list2、模版形参可以表示类型形参,也可以表示常量表达式的非类型形参。3、使用函数模版时,编译器会推断出哪个或哪些模版实参绑定到模版形参。一旦编译器确定了实际的模版实参,就称它实例化了函数模版的一个实例。4、inline 只能放在template5、类型形参也存在屏蔽问题。模版形参的名字只能在同一个列表中出现一次,但
2013-09-12 16:06:32 800 1
原创 stack逆序和排序
// 两个斩实现一个队列// 两个队列实现一个栈// 用递归颠倒一个栈//void reverse(stack&s, int *p)//{// int t = s.top();// s.pop();// reverse(s, t);//}#include using namespace std;#include // 递归 栈元素的排序.最小值在topvoid or
2013-09-11 22:54:51 2276
原创 bst三种遍历及其他
#include #include //using stack;using namespace std;struct Node{ int data; Node *left; Node *right;};Node* insert(Node*p, int n){ Node *f = p; Node *r = p; while (p != NULL) { f =
2013-09-10 13:53:24 2211
原创 bst总结
// 已知中序遍历和其他任意一种遍历,可以还原二叉树// bst查找. 非递归Node *find(Node *p, int n){while(p != NULL){if (n data)p = p->left;elseif (n > p->data)p = p->right;else return p;}retu
2013-09-09 14:21:34 587
原创 弱符号:库函数的覆盖
GCC的weak可以用来覆盖库函数。即,将库函数的函数声明声明为weak,则自己可以定义一个一模一样但功能不同的函数,此时就会调用自定义的版本,如果没有自定义,那么就将调用库函数版本。 下面是一个小例子: main.cpp a.h a.cppmain.cpp:#include #include #include "a.h"usi
2013-09-02 00:25:23 1624
相关向量机(RVM)论文6篇
2011-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人