2012年8月9日

NYOJ 125 盗梦空间

摘要: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int main() 5 { 6 int n,m,i,t ,s,w;; 7 char str[10]; 8 scanf("%d",&n); 9 while(n--)10 {11 scanf("%d",&m);12 s = 0; w = 1; i= 0;13 while(m--)14 {15 scanf("%s",&str);16 ... 阅读全文

posted @ 2012-08-09 20:54 mycapple 阅读(294) 评论(0) 推荐(0) 编辑

NYOJ 290 动物统计加强版

摘要: 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=290经典的字典树的问题,代码几乎可以来当模版来用了,就留下来了~~~,不过貌似用运算符重载排序(不知道是不是)也能过。。。。。。。。需要注意的是开辟一个新的内存时下一个指针一定要指向NULL; 1 #include<cstring> 2 #include<cstdio> 3 #include<iostream> 4 using namespace std; 5 struct node{ 6 node *next[26]; 7 int count; 8 阅读全文

posted @ 2012-08-09 18:29 mycapple 阅读(352) 评论(0) 推荐(0) 编辑

字典树

摘要: 字典树,又称单词查找树,Trie树,是一种树形结构,典型应用是用于统计,排序和保存大量的字符串,所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度的减少无谓的字符串比较,查询效率比哈希表高。它有三个基本性质,根节点不包含字符,除根节点外每一个节点都只包含一个字符,从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串,每个节点的所有子节点包含的字符都不相同。字典树的插入,删除和查找都非常简单,用一个一重循环即可。1. 从根节点开始一次搜索2. 取得要查找关键词的第一个字母,并根据该字母选择对应的子树并转到该子树继续进行检索3. 在相应的 阅读全文

posted @ 2012-08-09 18:22 mycapple 阅读(442) 评论(0) 推荐(0) 编辑

数据结构之线段树

摘要: 1、概述线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。2、线段树基本操作线段树的基本操作主要包括构造线段树,区间查询和区间修改。(1) 线段树构造首先介绍构造线段树的方法:让根节点表示区间[0,N-1],即所有N个数所组成的一个区间,然后,把区间分成两半,分别由左右子树表示。不难证明,这样的线段树的节点数只有2N-1个,是O(N)级别的,如图:显然,构造线段树是一个递归的过程,伪代码如下://构造求解区间最小值的线段树function 构造以v为根的子树 if v所表示的区间内只有一个元. 阅读全文

posted @ 2012-08-09 16:05 mycapple 阅读(2987) 评论(0) 推荐(1) 编辑

数据结构之树状数组

摘要: 1、概述树状数组(binary indexed tree),是一种设计新颖的数组结构,它能够高效地获取数组中连续n个数的和。概括说,树状数组通常用于解决以下问题:数组{a}中的元素可能不断地被修改,怎样才能快速地获取连续几个数的和?2、树状数组基本操作传统数组(共n个元素)的元素修改和连续元素求和的复杂度分别为O(1)和O(n)。树状数组通过将线性结构转换成伪树状结构(线性结构只能逐个扫描元素,而树状结构可以实现跳跃式扫描),使得修改和求和复杂度均为O(lgn),大大提高了整体效率。给定序列(数列)A,我们设一个数组C满足C[i] = A[i–2^k+ 1] + … + A[i]其中,k为i在 阅读全文

posted @ 2012-08-09 16:03 mycapple 阅读(911) 评论(0) 推荐(0) 编辑

数据结构之伸展树

摘要: 1、 概述二叉查找树(Binary Search Tree,也叫二叉排序树,即Binary Sort Tree)能够支持多种动态集合操作,它可以用来表示有序集合、建立索引等,因而在实际应用中,二叉排序树是一种非常重要的数据结构。从算法复杂度角度考虑,我们知道,作用于二叉查找树上的基本操作(如查找,插入等)的时间复杂度与树的高度成正比。对一个含n个节点的完全二叉树,这些操作的最坏情况运行时间为O(log n)。但如果因为频繁的删除和插入操作,导致树退化成一个n个节点的线性链(此时即为一个单链表),则这些操作的最坏情况运行时间为O(n)。为了克服以上缺点,很多二叉查找树的变形出现了,如红黑树、AV 阅读全文

posted @ 2012-08-09 16:02 mycapple 阅读(791) 评论(0) 推荐(0) 编辑

数据结构之后缀数组

摘要: 1. 概述后缀数组是一种解决字符串问题的有力工具。相比于后缀树,它更易于实现且占用内存更少。在实际应用中,后缀数组经常用于解决字符串有关的复杂问题。本文大部分内容摘自参考资料[1][2]。2. 后缀数组2.1 几个概念(1)后缀数组SA 是一个一维数组,它保存1..n 的某个排列SA[1],SA[2],……,SA[n],并且保证Suffix(SA[i]) < Suffix(SA[i+1]),1≤i<n。也就是将S 的n 个后缀从小到大进行排序之后把排好序的后缀的开头位置顺次放入SA 中。其中,suffix(i)表示字符串s[i,i+1…n-1],即字符串s起始于第i个字符的后缀。( 阅读全文

posted @ 2012-08-09 16:01 mycapple 阅读(590) 评论(0) 推荐(0) 编辑

NYOJ 86 找球号(一)

摘要: 这个方法超时了TimeLimitExceeded,看来只能用二分查找了,即折半查找法,因为数据太大了,要输出太多的数。。。。你懂的。。。。地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=86 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define max 1000010 4 int a[max],b; 5 int cmp(const void *x,const void *y) 6 { 7 return *(int*)x-*(int*)y; 8 } 9 int main 阅读全文

posted @ 2012-08-09 15:15 mycapple 阅读(355) 评论(0) 推荐(0) 编辑

NYOJ 106 背包问题

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=106这道题典型的应用贪心算法。不过有些不同的是这个题目已经告诉你单位价值了,所以我们不需要考虑计算单位价值最高的,从高到低的选择了。我们现在所需要做的就是对单位价值进行排序,然后从高到底取物品,直到重量达到题目中告诉的背包的W。想明白之后,思路也就很清晰了。sort排序,结构体或者二维数组进行储存数据。最后执行计算价值和·······不过这个题目中值得留意就是那个对结构体数据的交换,没有单独定义一个变量,而是用结构体中最 阅读全文

posted @ 2012-08-09 10:54 mycapple 阅读(472) 评论(0) 推荐(0) 编辑

NYOJ 156 Hangover

摘要: 考查点:简单计算题思路:一直加撒,直到大于等于那个数即可,注意控制下循环变量即可.>提交情况:没的说的,肯定直接AC.> 1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 int i; 6 double a,sum; 7 while(scanf("%lf",&a),a) 8 { 9 i=1;10 sum=0;11 while(i++)12 {13 sum+=1.0/i;14 i... 阅读全文

posted @ 2012-08-09 09:30 mycapple 阅读(175) 评论(0) 推荐(0) 编辑

100阶乘末尾有多少个零?

摘要: 在一堂无聊的信息检索课程上旁边的同学提出了一道java面试题——100的阶乖末尾有多少个零?我结合网上的思路对此探讨一下:题目:1*2*3*……*100 求结果末尾有多少个零分析:一般类似的题目都会蕴含某种规律或简便方法的阶乘末尾一个零表示一个进位,则相当于乘以10而10 是由2*5所得,在1~100当中,可以产生10的有:0 2 4 5 6 8 结尾的数字,显然2是足够的,因为4、6、8当中都含有因子2,所以都可看当是2,那么关键在于5的数量了那么该问题的实质是要求出1~100含有多少个5由特殊推广到一般的论证过程可得:1、每隔5个,会产生一个0,比如5,10,15,20.。。2 、每隔5& 阅读全文

posted @ 2012-08-09 08:54 mycapple 阅读(1227) 评论(0) 推荐(0) 编辑

NYOJ 84 阶乘的0

摘要: 1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 int t,n,i; 6 scanf("%d",&t); 7 while(t--) 8 { 9 i=0;10 scanf("%d",&n);11 while(n)12 {13 n/=5; //看有多少个5的因子,就有多少个0,具体看知识补充14 i+=n; 15 }16 printf("%d\... 阅读全文

posted @ 2012-08-09 08:51 mycapple 阅读(471) 评论(0) 推荐(0) 编辑

阶乘相关的算法及其C++实现

摘要: 阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。C++中的阶乘亦是如此。有关阶乘的算法,不外乎两个方面:一是高精度计算;二是与数论相关。 一、高精度计算阶乘 这实际上是最没有技术含量的问题,但是又会经常用到,所以还是得编写,优化它的计算。 首先看小于等于12的阶乘计算(计算结果不会超出32位范围):int factorial(int n) {if (n == 1 || n == 0)return 1;return factorial(n-1)*n;} 这个递归程序简单明了,非常直观,然而一旦n > 12,则超过32位int型的范围出现错误结果,所以上面这个递归程序仅适合n <= 1 阅读全文

posted @ 2012-08-09 08:34 mycapple 阅读(4731) 评论(0) 推荐(0) 编辑

NYOJ 68

摘要: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 int main() 5 { 6 int x0,x1,x2,y0,y1,y2; 7 double s; 8 while(scanf("%d%d%d%d%d%d",&x0,&y0,&x1,&y1,&x2,&y2)) 9 {10 if(x0==0&&y0==0&&x1==0&&y1==0&&x2==0& 阅读全文

posted @ 2012-08-09 08:19 mycapple 阅读(155) 评论(0) 推荐(0) 编辑

导航