2012年8月7日

NYOJ 240 小明的调查统计(二)

摘要: 地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=240 1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<string> 5 using namespace std; 6 struct chenji 7 { 8 int bj;//班级编号 9 int xh;//学号10 int cj;//数学成绩11 int mc;//名次12 } c[100001];13 bool comp(chenji x 阅读全文

posted @ 2012-08-07 21:13 mycapple 阅读(404) 评论(0) 推荐(0) 编辑

NYOJ 238 小明的调查统计

摘要: 1 #include<stdio.h> 2 #include<stdlib.h> 3 int cmp(const void *a,const void *b) 4 { 5 return *(int *)a-*(int *)b; //升序 6 } 7 int main() 8 { 9 int t,n,i;10 int a[110];11 scanf("%d",&t);12 while(t--)13 {14 scanf("%d",&n);15 for(i=0;i<n;i++)16 scanf("%d.. 阅读全文

posted @ 2012-08-07 20:39 mycapple 阅读(170) 评论(0) 推荐(0) 编辑

NYOJ 225 小明求素数积

摘要: 1 #include<stdio.h> 2 #include<math.h> 3 #include<stdlib.h> 4 int is_prime(int x) 5 { 6 int i; 7 if(x==1) return 0; 8 for(i=2;i<=sqrt(x);i++) 9 if(x%i==0) return 0;10 return 1;11 }12 int main()13 {14 int t,n,i,sum;15 scanf("%d",&t);16 while(t--)17 {18 s... 阅读全文

posted @ 2012-08-07 20:28 mycapple 阅读(298) 评论(0) 推荐(0) 编辑

NYOJ 224 灯光师小明

摘要: 刚开始一直不能编译,后来才知道,当数组所占空间比较大时,就不能放进函数里,因为在函数里定义的变量,是在栈上创建的,数组太大,会造成栈溢出,使程序出错。而全局变量是在数据段创建的,可非常大1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 int light[1000010];//不能放到函数里是由于在函数中定义的变量,在栈上创建,全局定义的变量,在数据段上创建。由于你的数组太大,会造成栈溢出,使得程序错误 5 int main() 6 { 7 int n,t,m,sum=0; 8 c 阅读全文

posted @ 2012-08-07 20:01 mycapple 阅读(322) 评论(0) 推荐(0) 编辑

NYOJ 223 小明的烦恼

摘要: 1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 int n; 6 scanf("%d%*c",&n); 7 while(n--) 8 { 9 int i,j,t=0;10 int a[11];11 char ch;12 for(i=0;i<=11;i++) //刚开始i<11,不知咋的出错了wa。我想应该要进行12次循环,虽然有11位号码,最后循环是enter吧13 {14 ch=ge... 阅读全文

posted @ 2012-08-07 17:09 mycapple 阅读(218) 评论(0) 推荐(0) 编辑

HDU 1863 畅通工程

摘要: 法一:地址:http://acm.hdu.edu.cn/showproblem.php?pid=1863 1 #include<iostream> 2 #include<cstdlib> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int parent[105]; 7 struct Edge{ 8 int from,to,price; 9 }edge[5100];10 bool compare(Edge a,Edge b){11 return a.price 阅读全文

posted @ 2012-08-07 16:43 mycapple 阅读(308) 评论(0) 推荐(0) 编辑

数据结构之并查集

摘要: 1、 概述并查集(Disjoint set或者Union-find set)是一种树型的数据结构,常用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。2、 基本操作并查集是一种非常简单的数据结构,它主要涉及两个基本操作,分别为:A. 合并两个不相交集合B. 判断两个元素是否属于同一个集合(1) 合并两个不相交集合(Union(x,y))合并操作很简单:先设置一个数组Father[x],表示x的“父亲”的编号。那么,合并两个不相交集合的方法就是,找到其中一个集合最父亲的父亲(也就是最久远的祖先),将另外一个集合的最久远的祖先的父亲指向它。上图为两个不相交集合,b图为合并后Fa 阅读全文

posted @ 2012-08-07 16:25 mycapple 阅读(673) 评论(0) 推荐(0) 编辑

数据结构之堆

摘要: 1. 概述堆(也叫优先队列),是一棵完全二叉树,它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。2. 堆的基本操作堆是一棵完全二叉树,高度为O(lg n),其基本操作至多与树的高度成正比。在介绍堆的基本操作之前,先介绍几个基本术语:A:用于表示堆的数组,下标从1开始,一直到nPARENT(t):节点t的父节点,即floor(t/2)RIGHT(t):节点t的左孩子节点,即:2*tLEFT(t):节点t的右孩子节点,即:2*t+1HEAP_SIZE(A):堆A当前的元素数目下面给出其主要的四个操作(以大顶 阅读全文

posted @ 2012-08-07 16:24 mycapple 阅读(672) 评论(0) 推荐(0) 编辑

数据结构之Treap

摘要: 1. 概述同splay tree一样,treap也是一个平衡二叉树,不过Treap会记录一个额外的数据,即优先级。Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质。因而,Treap=tree+heap。这里需要注意的是,Treap并不是二叉堆,二叉堆必须是完全二叉树,而Treap可以并不一定是。2. Treap基本操作为了使Treap 中的节点同时满足BST性质和最小堆性质,不可避免地要对其结构进行调整,调整方式被称为旋转。在维护Treap 的过程中,只有两种旋转,分别是左旋转(简称左旋)和右旋转(简称右旋)。左旋一个子树,会把它的根节点旋转到根的左子树位置,同时根节点的右子 阅读全文

posted @ 2012-08-07 16:22 mycapple 阅读(539) 评论(0) 推荐(0) 编辑

数据结构之AVL树

摘要: 1. 概述AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. Landis。AVL树种查找、插入和删除在平均和最坏情况下都是O(log n),增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。本文介绍了AVL树的设计思想和基本操作。2. 基本术语有四种种情况可能导致二叉查找树不平衡,分别为:(1)LL:插入一个新节点到根节点的左子树(Left)的左子树(Left),导致根节点的平衡因子由1变为2(2)RR:插入一个新节点到根节点的右子树(Right)的右子树 阅读全文

posted @ 2012-08-07 16:21 mycapple 阅读(547) 评论(0) 推荐(0) 编辑

算法之排序算法

摘要: 1. 概述排序算法是计算机技术中最基本的算法,许多复杂算法都会用到排序。尽管各种排序算法都已被封装成库函数供程序员使用,但了解排序算法的思想和原理,对于编写高质量的软件,显得非常重要。本文介绍了常见的排序算法,从算法思想,复杂度和使用场景等方面做了总结。2. 几个概念(1)排序稳定:如果两个数相同,对他们进行的排序结果为他们的相对顺序不变。例如A={1,2,1,2,1}这里排序之后是A = {1,1,1,2,2} 稳定就是排序后第一个1就是排序前的第一个1,第二个1就是排序前第二个1,第三个1就是排序前的第三个1。同理2也是一样。不稳定就是他们的顺序与开始顺序不一致。(2)原地排序:指不申请多 阅读全文

posted @ 2012-08-07 16:21 mycapple 阅读(1593) 评论(0) 推荐(0) 编辑

数据结构之位图

摘要: 1. 概述位图(bitmap)是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。本文介绍了位图的实现方法及其应用场景。2. 位图实现(1)自己实现在位图中,每个元素为“0”或“1”,表示其对应的元素不存在或者存在。#define INT_BITS sizeof(int)#define SHIFT 5 // 2^5=32#define MASK 0x1f // 2^5=32#define MAX 1024*1024*1024 //max numberint bitmap[MAX / INT_BITS];/** 设置第i位* i >> SHIFT 相当于 i / (2 ^ SHI 阅读全文

posted @ 2012-08-07 16:20 mycapple 阅读(3012) 评论(0) 推荐(0) 编辑

算法之排列与组合算法

摘要: 1. 前言本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。2. 排列算法常见的排列算法有:(A)字典序法(B)递增进位制数法(C)递减进位制数法(D)邻位对换法(E)递归法介绍常用的两种:(1) 字典序法对给定的字符集中的字符规定了一个先后关系,在此基础上按照顺序依次产生每个排列。[例]字符集{1,2,3},较小的数字较先,这样按字典序生成的全排列是:123,132,213,231,312,321。生成给定全排列的下一个排列 所谓一个的下一个就是这一个与下一个之间没有字典顺序中相邻的字符串。这就要求这一个与下一个有尽可能长的共同前缀,也即变化限制在尽可能短的后 阅读全文

posted @ 2012-08-07 16:19 mycapple 阅读(1463) 评论(0) 推荐(0) 编辑

算法之图搜索算法(一)

摘要: 1. 介绍本文介绍了比较初级的图搜索算法,包括深度优先遍历,广度优先遍历和双向广度优先遍历。2. 深度优先遍历DFS2.1 算法思想从图中某个顶点v开始,访问此节点,然后依次从v中未被访问的邻接点出发深度优先遍历图,直到图中上所有和v有路径相通的顶点都被访问;若此时图中尚有顶点未被访问,则另选图中一个未被访问顶点做起点,重复以上过程,直到图中所有顶点都被访问为止。深度优先搜索遍历类似于树的先序遍历。假定给定图G的初态是所有顶点均未被访问过,在G中任选一个顶点i作为遍历的初始点,则深度优先搜索遍历可定义如下:(1) 首先访问顶点i,并将其访问标记置为访问过,即visited[i]=1;(2) 然 阅读全文

posted @ 2012-08-07 16:17 mycapple 阅读(2031) 评论(0) 推荐(0) 编辑

素数判定算法

摘要: 1. 素数判定问题素数判定问题是一个非常常见的问题,本文介绍了常用的几种判定方法。2. 原始算法素数的定义是,除了能被1和它本身整除而不能被其他任何数整除的数。根据素数定义 只需要用2到n-1去除n,如果都除不尽,则n是素数,否则,只要其中有一个数能整除则n不是素数。bool is_primer1(int num) { int i; for(i = 2; i < num; i++) { if(num % i == 0) { return true; } } return false;}3. 改进算法n不是素数,则n可表示为a*b,其中2<=a<=b<=n-1,则a... 阅读全文

posted @ 2012-08-07 16:16 mycapple 阅读(2493) 评论(0) 推荐(0) 编辑

数据结构之红黑树

摘要: 1. 简介红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除等操作。本文介绍了红黑树的基本性质和基本操作。2. 红黑树的性质红黑树,顾名思义,通过红黑两种颜色域保证树的高度近似平衡。它的每个节点是一个五元组:color( 阅读全文

posted @ 2012-08-07 16:12 mycapple 阅读(770) 评论(0) 推荐(0) 编辑

背包问题应用

摘要: 1. 背包问题介绍背包问题不单单是一个简单的算法问题,它本质上代表了一大类问题,这类问题实际上是01线性规划问题,其约束条件和目标函数如下:自从dd_engi在2007年推出《背包问题九讲》之后,背包问题的主要精髓基本已道尽。本文没有尝试对背包问题的本质进行扩展或深入挖掘,而只是从有限的理解(这里指对《背包问题九讲》的理解)出发,帮助读者更快地学习《背包问题九讲》中的提到的各种背包问题的主要算法思想,并通过实例解释了相应的算法,同时给出了几个背包问题的经典应用。2. 背包问题及应用dd_engi在《背包问题九讲》中主要提到四种背包问题,分别为:01背包问题,完全背包问题,多重背包问题,二维费用 阅读全文

posted @ 2012-08-07 16:11 mycapple 阅读(1677) 评论(0) 推荐(2) 编辑

NYOJ 212 K尾相等数

摘要: 题目分析:本题就是要利用M*N%R=((M%R)*(N%R))%R 来计算。即K先%1000,然后接下来有1001个K%1000相乘,之所以这样是由于当K或者Power比较大的时候它们相乘可能导致数据溢出,这就需要参考我的另一篇文章里的对大数进行求模运算的相关算法了 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> //包含memset函数 4 5 int Record[1000];//用以记录的一维数组 6 7 int KTail(int K) 8 { 9 memset(Record 阅读全文

posted @ 2012-08-07 12:24 mycapple 阅读(255) 评论(0) 推荐(0) 编辑

抽屉原理

摘要: 桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现 至少会有一个抽屉里面放两个苹果。这一现象就是我们所说的“抽屉原理”。 抽屉原理的一般含义为:“如果每个抽屉代表一个集合,每一个苹果就可以代 表一个元素,假如有n+1或多于n+1个元素放到n个集合中去,其中必定至少有 一个集合里有两个元素。” 抽屉原理有时也被称为鸽巢原理(“如果有五个鸽 子笼,养鸽人养了6只鸽子,那么当鸽子飞回笼中后,至少有一个笼子中装有2 只鸽子”)。它是组合数学中一个重要的原理。 第一抽屉原理 原理1 把多于n个的物体放到n个抽屉里,则至少有一个抽屉里的东西不少 于两件; 抽屉原理[证明](反证法):如. 阅读全文

posted @ 2012-08-07 12:24 mycapple 阅读(434) 评论(0) 推荐(0) 编辑

NYOJ 169 素数

摘要: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 int is_prime(int x) 5 { 6 int i; 7 if(x==1) return 1;//是素数返回0,不是素数返回1 8 for(i=2;i<=sqrt(x);i++) 9 if(x%i==0) return 1;10 return 0;11 }12 int main()13 {14 int n,m,a,b;15 scanf("%d",&n);16 while(n--)17 ... 阅读全文

posted @ 2012-08-07 12:00 mycapple 阅读(830) 评论(0) 推荐(0) 编辑

导航