上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 27 下一页
摘要: 境界一、 暴力广搜+STL 开始的时候,自然考虑用最直观的广搜,因为状态最多不超过40万,计算机还是可以接受的,由于广搜需要记录状态,并且需要判重,所以可以每次图的状态转换为一个字符串,然后存储在stl中的容器set中,通过set的特殊功能进行判重,由于set的内部实现是红黑树,每次插入或者查找的复杂度为Log(n),所以,如果整个算法遍历了所有状态,所需要的复杂度为n*Log(n),在百万左右,可以被计算机接受,由于对string操作比较费时,加上stl全面性导致 速度不够快,所以计算比较费时,这样的代码只能保证在10秒内解决任何问题。但,明显效率不够高。POJ上要求是1秒,无法通过,第一. 阅读全文
posted @ 2013-07-30 19:35 执着追求的IT小小鸟 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 我们经常使用的数的进制为“常数进制”,即始终逢p进1。例如,p进制数K可表示为 K = a0*p^0 + a1*p^1 + a2*p^2 + ... + an*p^n (其中0 pi,那么, 如果在排列Q中qi之前的元素x与qi构成逆序对,即有x > qi,则在排列P中pi之前也有相同元素x > pi(因为x > qi且qi > pi),即在排列P中pi之前的元素x也与pi构成逆序对,所以pi的逆序数大于等于qi的逆序数。又qi与pi在排列P中构成pi的逆序对,所以pi的逆序数大于qi的逆序数。 (2)同理,如果pi > qi,那么qi的逆序数大于pi的逆序数。 阅读全文
posted @ 2013-07-30 15:16 执着追求的IT小小鸟 阅读(575) 评论(0) 推荐(0) 编辑
摘要: #include #include int size,k;typedef struct tree_node Tree; struct tree_node{ Tree * left, * right; int item;};int count=0,min;Tree * splay (int i, Tree * t){ Tree N, *l, *r, *y; if (t == NULL) return t; N.left = N.right = NULL; l = r = &N; while(1) { if (i ite... 阅读全文
posted @ 2013-07-27 10:14 执着追求的IT小小鸟 阅读(134) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1075字典树的简单运用,这题关键在于处理相同后缀的问,只要在结点里加个标志就可以了,标志到此结点为止是否已经有可代换的单词#include#include#includetypedef struct node{ struct node *child[26];//这是接下去的字母的指针 char v[100];//存储信息,可变。这里存的是以到此为止的字符串为前缀的单词量 int n;}Trie;Trie *root;int build(char *I,char *M){ int l... 阅读全文
posted @ 2013-07-26 14:46 执着追求的IT小小鸟 阅读(129) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1251初学字典树词典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。1、性质 它有3个基本性质: 根节点不包含字符,除根节点外每一个节点都只包含一个字符。 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。 每个节点的所有子节点包含的字符都不相同。2、基本操作 其基... 阅读全文
posted @ 2013-07-26 11:47 执着追求的IT小小鸟 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 开始用链表写,可是申请空间导致无限MLE,蛋疼的无以复加懒得写,默默剽窃个,自己写了注释#include typedef struct{ int left,right,max; int lChild,rChild;}SegTree;SegTree list[800000];// int max(int a, int b)//求最大 { return a > b? a:b;}void createSegTree(int root, int left, int right){ int mid; if(right = 1)//在区间内,但未找到 { ... 阅读全文
posted @ 2013-07-25 20:42 执着追求的IT小小鸟 阅读(150) 评论(0) 推荐(0) 编辑
摘要: #include#include#includetypedef struct CNode{int L,R; //区间起点和终点int key;//兵力int add;//这是记录增量 struct CNode * left, * right;//放置左右孩子指针 }IT;IT *creat(int l,int r)//建树,用二叉链做,压力。。 { IT *s=(IT *)malloc(sizeof(IT)); s->L=l; s->R=r; s->key=0; if(l==r)//左右相等,表示只有自己一个节点了 { s->left=s->right=NULL. 阅读全文
posted @ 2013-07-25 15:46 执着追求的IT小小鸟 阅读(174) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1166树状数组的运用,关键在于理解树状数组的建立及相关操作操作主要分四个:一:管辖域的求解就是2的k次方,有公式:cn=a(n-a^k+1)+.........+an(其中 k 为 n 的二进制表示中从右往左数的 0 的个数)。则可以用函数lowbit(n)直接求出二,单个数的调整当有一个数发生改变时,管辖到它的数也要做相关的调整三,求和将管辖到的数加上未管辖到的数四,建树有公式: c[i]=sum[i]-sum[i-lowbit(i)];i从1开始#include#include int a[50010], 阅读全文
posted @ 2013-07-25 11:22 执着追求的IT小小鸟 阅读(192) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1182看了别人的技巧,最后自己才勉强写出:(摘自poj)kind[a]=0表示a与父节点属于同一类。kind[a]=1表示a吃父节点。kind[a]=2表示父节点吃a。 (后二种情况下的赋值可以改变,但对后续有点小影响)1.有一种关系b是a父节点,c是b父节点, a与c的关系可以表示为 (kind[a]+kind[b])%3 (延续性,适用于多个节点的延续,如3个节点根据二次计算即可完成)2.b是a的父节点,表示为kind[a]. 若父子节点相互反转,即a是b的父节点,kind[b]=(3-kind[a])%3 (反转性)根据延... 阅读全文
posted @ 2013-07-23 22:30 执着追求的IT小小鸟 阅读(99) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1829跟“find them,catch them”思路一样#include//其实只有一个集合,只是在每条边上赋了值罢了,权值 #includeint bin[100002],zt[100002];int findx(int x){ int r=bin[x]; if(x==bin[x]) return bin[x]; bin[x]=findx(bin[x]);//递归方法查找根结点 zt[x]=(zt[x]==zt[r])?0:1;//成立时表示子节点根父亲结... 阅读全文
posted @ 2013-07-23 16:43 执着追求的IT小小鸟 阅读(238) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 27 下一页