
算法
文章平均质量分 57
xumesang
一辈子做好一件事
展开
-
插入排序
#include int main(){ int arr[10] = {31, 41, 59, 21, 45, 58, 45, 59, 32, 12}; int j, i, key; for(j =1; j<10; j++) { key = arr[j]; i = j-1; while(i>=0 && arr[i]<=key) { arr[i原创 2015-03-01 19:35:59 · 408 阅读 · 0 评论 -
HDOJ刷题(1093)
A+B for Input-Output Practice (V)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 55226 Accepted Submission(s): 37126Problem Descripti原创 2015-04-12 15:27:43 · 581 阅读 · 0 评论 -
HDOJ刷题(1089)
A+B for Input-Output Practice (I)Problem DescriptionYour task is to Calculate a + b.Too easy?! Of course! I specially designed the problem for acm beginners. You must have found that som原创 2015-04-12 12:43:07 · 563 阅读 · 1 评论 -
HDOJ刷题(1092)
A+B for Input-Output Practice (IV)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 74414 Accepted Submission(s): 39738Problem Descript原创 2015-04-12 15:07:59 · 1464 阅读 · 0 评论 -
HDOJ(1094)
A+B for Input-Output Practice (VI)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 51712 Accepted Submission(s): 34795Problem Descript原创 2015-04-12 16:10:57 · 581 阅读 · 0 评论 -
字符串匹配KMP算法实现
由于KMP算法比较难,所以建议初学者分两个阶段学习。第一个阶段先理解算法思想,可以参考这篇文章:点击打开链接第二个阶段,理解算法的具体实现,本文主要讲解这部分,需要注意的地方都在程序里了,自己看吧程序(调试通过):#include #include int KMP(char* s, char* pattern, int start, int next[]);void原创 2015-04-13 19:43:11 · 636 阅读 · 0 评论 -
POJ刷题(2499)
程序(已经Accepted):#include /* * 逆向思维,从(m,n)到(1,1), * 给定(m,n),求其父亲,若m>n,则其父亲为(m-n,n),否则为(m,n-m), * 但是这样做会TLE,这就需要用除法代替减法,加快速度, * 也就是辗转相除法 * */int main(void){ int n, a, b, l, r, temp, i;原创 2015-04-14 21:34:35 · 681 阅读 · 0 评论 -
POJ刷题(2406)
程序(已经accepted):#include#include#include#define N 1000010char str[N];int next[N];int get_next(char pattern[], int next[]){ int j=0,k=-1; int len=strlen(pattern); next[0]=-1;原创 2015-04-14 15:58:14 · 512 阅读 · 0 评论 -
找出最大值和最小值的时间复杂度比较小的一种方法
一般认为,对于给定的n个数,只要独立地找出最小值和最大值,各用n-1次比较,最多2(n-1)次就可以找出最大值和最小值。 实际上,至多3(n/2)次比较就足以同时找到最大值和最小值,具体做法是:成对的处理元素,先将一对元素互相比较,然后将最小者与当前最小值比较,将较大者与当前最大值比较,因此每两个元素需要3次比较。这里要注意n的奇偶,当n是奇数,就将最小值和最大值都设置为第一个元素原创 2015-04-16 11:08:15 · 14243 阅读 · 0 评论 -
POJ刷题(2013)
程序(已经accepted):#include int main(){ char name[15][26]; int n, i; int N = 1; while(scanf("%d\n", &n) == 1 && n) { for(i=0; i<n; i++) gets(name[i]);原创 2015-04-16 18:59:21 · 601 阅读 · 0 评论 -
ACM刷题需要注意关于输入输出的问题
下面总结一下刷题需要注意的问题:1. scanf函数返回值就是读出的变量个数,没有读到数据返回-1,EOF是一个预定义的常量,为-1;2. scanf函数读入数据,不能规定精度。如:scanf("%7.2f", &n);是不合法的;3. C语言不支持在for语句里定义变量。如:for(int i=0; i三种输入:1. 数据量不定的情况:用while(scanf("%d原创 2015-04-12 16:49:21 · 982 阅读 · 0 评论 -
HDOJ刷题(1096)
程序(已经accepted):#include int main(){ int i, line, n, number, sum; scanf("%d", & line); for(i=1; i<=line; i++) { if(i>1) printf("\n"); scanf("%d", &n);原创 2015-04-12 16:34:58 · 640 阅读 · 0 评论 -
HDOJ刷题(1095)
A+B for Input-Output Practice (VII)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 51087 Accepted Submission(s): 34226Problem Descrip原创 2015-04-12 15:43:46 · 712 阅读 · 0 评论 -
TCP初始化序列号ISN的程序实现
RFC1948中提出了一个较好的初始化序列号ISN随机生成算法,简单描述就是:ISN = C +H(sourceIP, sourcePort, destIP, destPort)H中的4个参数分别是:源IP,源端口号,目的IP,目的端口号。闲话少说,看代码。#include#include#include#include //unsleep()using names原创 2015-03-24 22:00:42 · 2009 阅读 · 0 评论 -
两个超大数相加
解决超大数相加的问题的一种思路是把整形转化成字符串,废话不多说直接上代码,已经调试通过。#include#include#includeusing namespace std;string add(string str1, string str2){ int i; string str; int len_str1 = str1.length(); int len_原创 2015-03-19 22:12:52 · 744 阅读 · 0 评论 -
两个超大数相乘
需要注意的都在代码注释里,自己看吧,欢迎讨论。#include#include#includeusing namespace std;//模拟手工加法string add(string str1, string str2){ int i; string str; int len_str1 = str1.length(); int len_str2 = str2.原创 2015-03-20 16:20:47 · 1008 阅读 · 0 评论 -
冒泡排序
#include#include#include#include //exit(1)using namespace std;void bubbleSort(vector& data){ int count = data.size(); int tag = false; //设置是否需要继续冒泡的标志位 for(int i=0; i<count; i++) { for(i原创 2015-03-17 22:04:18 · 429 阅读 · 0 评论 -
堆排序
#include#include#include //exit(1)using namespace std;void HeapSort(int* a, int size);void HeapBuild(int* a, int size);void HeapAdjust(int* a, int i, int size);//堆排序void HeapSort(int* a, int原创 2015-03-19 17:12:44 · 518 阅读 · 1 评论 -
计数排序
计数排序的基本思想就是对每一个输入元素x,确定出小于x的元素个数。有了这一信息,就可以把x直接放到它在最终输出数组中的位置上。计数排序的一个重要性质就是它是稳定的,为什么重要呢?因为计数排序经常用作基数排序算法的一个子过程。废话少说,直接上代码:#include //计数排序,k:数组A中最大的元素; i:数组A元素的个数int* CountSort(int* A, int* B原创 2015-04-10 21:26:51 · 627 阅读 · 0 评论 -
基数排序
首先来看两个经典引理:引理1:给定n个d位数,每一个数位可以取k种可能的值。基数排序算法能以 θ(d(n+k))的时间正确地对这些数进行排序。引理2:给定n个b位数和任何正整数r θ((b/r)(n+2^r))时间内正确地对这些数进行排序。下面是基数排序的LSD法(最低位优先)程序实现:#include#includeusing namespace std;//返回数字的第原创 2015-04-11 21:21:08 · 595 阅读 · 0 评论 -
HDOJ刷题(1091)
A+B for Input-Output Practice (III)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 82322 Accepted Submission(s): 43071Problem Descr原创 2015-04-12 13:30:59 · 1465 阅读 · 0 评论 -
HODJ刷题(1090)
A+B for Input-Output Practice (II)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 71613 Accepted Submission(s): 46450Problem Desc原创 2015-04-12 13:21:09 · 813 阅读 · 0 评论 -
两种快速排序算法性能的比较
先来看看第一种快速排序算法(QuickSort1):#include #include #include #define MAXNUM 1024using namespace std;void QuickSort(int A[], int low, int high){ if(low>=high) return; int first = low; int last原创 2015-04-09 16:07:52 · 886 阅读 · 1 评论