
ACM入门经典学习笔记
文章平均质量分 62
不可触及
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
打卡第十七天(问题:冒泡排序算法,扩展欧几里得算法)
1.冒泡排序冒泡排序是主要排序算法的一种,思路简单明了,在数据基本有序的情况下,采用改进版,排序方法十分有效。冒泡排序的基本思想是比较相邻两个元素,如果不是有序则进行交换,重复这个操作,直到全部数据有序为止。冒泡排序对待排序的数据(关键码)进行多趟处理,每一趟可以将一个大的数交换到右边适当的位置。它的缺点是数据交换次数有可能比较多。这里给出两个函数,一个是排序过程中,不考虑是否已经...转载 2018-10-10 19:01:32 · 188 阅读 · 0 评论 -
打卡第二十五天
模乘逆元与孙子定理孙子定理也称为中国剩余定理。《孙子算经》卷下第二十六题(“物不知数”问题):有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?孙子定理讲的是求解一元线性同余方程组的方法。有人指出,孙子定理有以下5种解法:1.枚举法2.解不定方程法3.逐级满足法4.化为相同除数的同余式法5.经典同余式方程组解法据说最为简洁快速的是第4种方法。这...转载 2018-10-19 19:59:52 · 142 阅读 · 0 评论 -
打卡第二十三天(问题:扩展欧几里得算法+试探法,杨辉三角问题,KMP算法)
1.HDU1576 A/B【扩展欧几里得算法+试探法】Problem Description要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。 Input数据的第一行是一个T,表示有T组数据。每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9...转载 2018-10-16 19:25:20 · 207 阅读 · 0 评论 -
打卡第十六天(问题:桃子到底有多少,中国马跳法,国际马跳法)
1.桃子到底有多少 问题描述:某人某日摘若干桃子,每天卖出一半并且吃掉一个,最后一天(第n天)剩下一个。 编写一个递归程序,天数n作为参数,计算一共摘了多少桃子。 分析问题可以得出以下的递推函数: f(1) = 1 n=1 f(n) = 2 * ( f(n-1) + 1 ) n>1 桃子问题算法程序:分别用递归和递推实现 其实...转载 2018-10-09 22:09:47 · 406 阅读 · 0 评论 -
srand函数
srand函数是随机数发生器的初始化函数。void test_rand(void) { unsigned long n; srand((unsigned)time(NULL)); for(int i = 0; i < 100; i++) { n = rand();...转载 2018-10-18 20:07:28 · 3060 阅读 · 0 评论 -
打卡第二十四天(问题:计算阶乘,打印九九乘法表,计算最大公约数的两种算法)
1.计算阶乘这里给出递归和递推两种计算阶乘的程序。#include<stdio.h>//递归法计算阶乘 long factorial(int n){ if(n==0||n==1) return 1; else return n*factorial(n-1); } //递推法计算阶乘 long factorial2(int n) { long ...转载 2018-10-18 19:28:58 · 615 阅读 · 0 评论 -
打卡第二十二天(问题:欧拉函数,最大数因数,快速计算素数程序)
1.欧拉函数欧拉函数是数论中的一个重要函数。同时,它也是密码系统不可缺少的极其重要的函数。 * 欧拉函数:数论中,对于正整数n,欧拉函数是小于n的数中与n互质的数的数目。 * 此函数以其首名研究者欧拉命名(Ruler'so totient function), * 又称为Euler's totient function、φ函数、欧拉商数等 #incl...转载 2018-10-15 19:14:09 · 409 阅读 · 0 评论 -
打卡第七天(计算最小公倍数LCM)
计算最小公倍数LCMLowest Common Multiple(LCM)这是数论算法中的基础算法程序。基于非递归的欧几里得算法(计算最大公约数GCD算法)来求解最小公倍数。/* * 计算最小公倍数(Lowest Common Multiple,LCM) * 需要用到计算最大公约数的函数 * * 两个数的乘积等于这两个数的最大公约数与最小公倍数的积。 * 即(a, b)×[a...转载 2018-09-29 23:37:59 · 584 阅读 · 0 评论 -
打卡第二十一天(ACM竞赛算法类型和插入排序算法)
ACM-ICPC竞赛算法类型竞赛算法:数论算法组合算法计算几何图论算法网络流算法搜索算法字符串算法自动机博弈论模拟法 六大算法:分治法贪心法动态规划法回溯法分支限界法遗传算法 基础过程与算法:递归法递推法枚举法查找算法排序算法数据结构有关算法插入排序插入排序是一种简单的类似于冒泡排序的方法。然而,数据交换次数呈线性化,相...转载 2018-10-14 17:30:36 · 224 阅读 · 0 评论 -
各类算法
---------------分治法一:递归概念递归是指子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的常用方法。递归有两个基本要素:边界条件,即确定递归到何时终止,也称递归出口;递归模式,即大问题是如何分解为小问题的,也称为递归体。二:分治法的基本思想分治法的设计思想是将一个难以直接解决的大问题分解成一些规模小的相同问题,以便各个击...原创 2018-10-19 22:45:50 · 638 阅读 · 0 评论 -
打卡第二十八天
算法导论-字符串匹配https://blog.youkuaiyun.com/u011467044/article/details/55008649字符串匹配算法的分析问题描述字符串匹配问题可以归纳为如下的问题:在长度为n的文本T[1...n]中,查找一个长度为m的模式P[1...m]。并且假设T,P中的元素都来自一个有限字母集合Ʃ。如果存在位移s,其中0≤s≤n-m,使得T[s+1..s+m...转载 2018-10-22 22:39:44 · 192 阅读 · 0 评论 -
打卡第二十六天
I00003 贝尔三角形在组合数合里,贝尔数给出了集合划分的数目,以数学家埃里克·坦普尔·贝尔(Eric Temple Bell)命名,是组合数学中的一组整数数列。贝尔三角形类似于杨辉三角,只是其中各个项的计算规则不同。其规则如下:1.第一行第一项是12.对于n>1,第n行第一项等同第n-1行最后一项。3.对于m,n>1,第n行第m项等于它左边和左上方的两个数之和。...转载 2018-10-20 22:16:20 · 670 阅读 · 0 评论 -
打卡第三十六天
介绍折半查找,又称作二分查找。这个查找的算法的特点,就是,要求数据要是有序的。1 ,存储结构一定是顺序存储2 ,关键字大小必须有序排列然后,利用这组有序的数据之间的关系,来进行折半的查找。比方说,这组数据是升序排列的。一开始,首先对比这组数据的中间的项与关键值(key)的关系。若是关键值(key)>中间值,则说明,关键值(key)在中间值的右侧,因此将这组数据的区间缩小为以...转载 2018-11-04 22:30:28 · 131 阅读 · 0 评论 -
打卡第三十五天
I00007 打印菱形字符图案打印菱形程序,关键是有关循环控制,只是控制逻辑多一些。对于输入的n,打印2n-1行的菱形字符图案。程序中需要控制好总行数和每一行的字符。每一行的字符从左到右包括空格(可能是0个)、*号字符(若干个)和换行符。程序如下:/* 打印菱形字符图案 */ #include <stdio.h> void delta(int n){ ...转载 2018-10-30 23:52:28 · 148 阅读 · 0 评论 -
打卡第三十天
POJ1006 UVA756 UVALive5421 Biorhythms【中国剩余定理】http://poj.org/problem?id=1006问题分析:本题可以直接用中国剩余定理来解,同余方程如下:X≡p(mod 23)X≡e(mod 28)X≡i(mod 33)其中,23、28和33是两两互素的,满足中国剩余定理的前提条件。程序说明:这里给出两个版本的...转载 2018-10-24 23:14:44 · 152 阅读 · 0 评论 -
打卡第三十四天
I00006 打印等腰三角形字符图案(底边在下)打印等腰三角形程序,关键是有关循环控制。程序中需要控制好总行数和每一行的字符。每一行的字符从左到右包括空格(可能是0个)、*号字符(若干个)和换行符。/* 打印等腰三角形字符图案(底边在下) */ #include <stdio.h> void delta(int n){ int i; for(i=...转载 2018-10-29 23:54:48 · 147 阅读 · 0 评论 -
打卡第二十九天
HDU2098 分拆素数和【筛选法】分拆素数和Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 42630 Accepted Submission(s): 18630Problem Description把一个偶数拆成两...转载 2018-10-23 23:42:26 · 285 阅读 · 0 评论 -
打卡第二十七天
HDU2099 整除的尾数【模除】Problem Description一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢? Input输入数据有若干组,每组数据包含二个整数a,b(0<a<10000, 10<b<100),若遇到0 0则处理结束。 Output对应每组数据,将满足条件的所有尾数在一行内输出,格式见样本...转载 2018-10-21 23:01:30 · 139 阅读 · 0 评论 -
打卡第三十一天
HDU1164 Eddy's research I【素因子分解+筛选法+欧拉函数】http://acm.hdu.edu.cn/showproblem.php?pid=1164问题分析:这是一个整数因子分解问题。有两种解法,一是按照欧拉函数计算的思想实现,二是采用筛选法。方法一:采用计算欧拉函数的基本思想进行分解,即从小因子开始逐步分解。这周方法需要注意的是,对于需要分解的整数...转载 2018-10-26 01:25:36 · 121 阅读 · 0 评论 -
打卡第三十三天
I00005 打印直角三角形字符图案/* 打印直角三角形字符图案 */ #include <stdio.h> void delta1(int n){ int i; for(i=1; i<=n; i++){ int j; for(j=1; j<=i; j++) printf("*"); ...转载 2018-10-28 22:37:01 · 114 阅读 · 0 评论 -
打卡第十五天(问题:计算x的n次方,桃子到底有多少)
1.计算x的n次方计算x的n次方有递归和递推程序。不论从时间或空间来看,自然递推优于递归。然而,二分法则是极其优的一种方法,用在计算x的n次方完全没有问题,而且不是递归而是递推的程序。程序中使用条件编译,以便于统计分析算法的计算量。正解是函数power3。 /* * * 计算x的n次方程序:1.递归程序;2.非递归程序;3.二分法。 * ...转载 2018-10-07 22:18:47 · 250 阅读 · 0 评论 -
打卡第六天(非递归求解N皇后问题回溯法)
非递归求解N皇后问题(回溯法)一般而言,回溯法可以说是一种穷举法,适合于求解各种深度优先搜索的问题。回溯法是一种应用广泛的算法。其关键点是解空间树和n元组可行解的定义。非递归回溯法程序的结构基本上是相同的,该程序的结构可以用求解各种类似的问题,例如图的着色问题等【问题描述】在一个8×8的国际象棋棋盘上放置8个皇后,要求每个皇后两两之间不“冲突”,即没有一个皇后能“吃 掉”任何其他一...转载 2018-09-28 21:50:17 · 482 阅读 · 0 评论 -
打卡第八天(快速排序分治法)
快速排序(分治法)Quicksort原始数据使用随机函数生成。采用结构化程序设计,可以很容易改为从标准输入或文件读入数据,只需要修改函数getData即可。数据个数由宏定义给出,也可以轻松地改为输入。快速排序程序中,根据选定的基元(程序中是第一个元素),划分部分的逻辑比较复杂一些。在概率均等的前提下,基元选哪个元素都是一样的。/* * * 快速排序算法程序、 * */...转载 2018-09-30 23:59:38 · 189 阅读 · 0 评论 -
打卡第三天
基础入门简单C语言题目:1: The Hardest Problem Everhttp://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1001&cid=33789解答:先建立字符数组,把不正确的字符一一给找出来,再用正确的字符替换他们;#include<stdio.h>#include<str...原创 2018-09-25 19:10:32 · 200 阅读 · 0 评论 -
打卡第二天
递归法:经典递归问题实战第一类问题:问题的定义是按递归定义的/** * Title: 阶乘的实现 n*(n-1)*(n-2)*...*1 * Description: * 递归解法 * 非递归解法 */#include<stdio.h> long f(int n) { if (n == 1) ...原创 2018-09-24 21:02:34 · 160 阅读 · 0 评论 -
新学期打卡第一天
Greatest Common Divisor(GCD)欧几里得算法用于计算最大公约数,时数论的基础算法之一,这里给出使用欧几里得算法求最大公约数的递归和非递归的程序,同时给出穷举法求最大公约数的程序。从计算时间,也就是时间复杂度来看,递推法计算速度最快。程序中包含条件编译语句用于统计分析计算复杂度。/* 计算两个数的最大公约数三种算法程序 */#include&l...转载 2018-09-23 22:18:01 · 272 阅读 · 0 评论 -
训练第四天
1:寻找满足ABC+DEF=GHI的情况有多少比如173+286=459看到这个题,我想大部分新手第一反应就是暴力循环,把所有可能的数字情况1到9全部枚举一遍,满足情况就输出,嗯,九重循环O(n^9)直接暴力深搜;#include<stdio.h>int outHand[10] = { 0 };int list[10] = { 0 };int total = 0;void DFS(in...原创 2018-04-28 20:45:06 · 168 阅读 · 0 评论 -
训练第三天
暴力深搜dfs算法:1.输入一个数n,输出1~n的全排列;输入:3输出:123 132 213 231 312 321思路:直接枚举,利用递归调用#include<iostream>using namespace std;int a[100];void dfs(int cur,int n)//cur表示目前正在填的数,n表示总共要填的数 { if(cur==n)//递归...原创 2018-04-25 23:47:53 · 150 阅读 · 0 评论 -
深度优先搜索算法的通用解法
一、深度优先搜索深度优先搜索算法(Depth First Search),是图论中的经典算法。深度优先搜索算法是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当结点所有子结点那一层都被搜索过,再回溯返回到当前结点的邻结点,继续搜索,直到遍历完整棵树。一般采用的是前序遍历,先根然后再左右结点的方式进行。一些经典的问题,比如八皇后、马走日、迷宫等,都可以通过深度优先搜索算法来解决。为了方便描述,下...转载 2018-04-25 21:17:13 · 481 阅读 · 0 评论 -
DFS(深搜)算法解析
图是一种灵活的数据结构,一般作为一种模型用来定义对象之间的关系或联系。对象由顶点(V)表示,而对象之间的关系或者关联则通过图的边(E)来表示。 图可以分为有向图和无向图,一般用G=(V,E)来表示图。经常用邻接矩阵或者邻接表来描述一副图。 在图的基本算法中,最初需要接触的就是图的遍历算法,根据访问节点的顺序,可分为广度优先搜索(BFS)和深度优先搜索(DFS)。广度优先搜索(BFS) 广度优先搜索...转载 2018-04-25 20:59:21 · 267 阅读 · 0 评论 -
训练第二天
1: 打印下列图形,输入n,即有多少这样行列的数;A B C D EB A B C DC B A B CD C B A B E D C B A思路:还是用数组存储;A的方程式为|x-y|=0;B的方程式为:|x-y|=1;依次类推就找到规律;因为A的位子是a[0][0],所以只要在他的基础上相加就行了;#include<stdio.h>#include<math.h>ch...原创 2018-04-18 00:43:09 · 163 阅读 · 0 评论 -
打卡第九天(Trial division)
Trial division试除法求最小N个素数是一个经典的算法。可以使用素数分类的性质来加快计算的速度。除了2以外,素数只能是2n+1,n>=1。除了2、3和5以外,素数只能是6n+1或6n+5,n>=1/** 试除法计算最小的N个素数** 素数中除了2以外,均为奇数。* 可以用试除法从奇数中挑选出最小的N个素数。** 另外,<sp...转载 2018-10-01 21:30:20 · 424 阅读 · 0 评论 -
打卡第十天(乘方取模计算(模幂计算))
竞赛算法:数论算法组合算法计算几何图论算法网络流算法搜索算法字符串算法自动机博弈论模拟法 六大算法:分治法贪心法动态规划法回溯法分支限界法遗传算法 基础过程与算法:递归法递推法枚举法查找算法排序算法数据结构有关算法 乘方取模计算(模幂计算)乘方取模计算也称为模幂计算,在密码系统中经常使用,是不可缺少的。使用本程序可以...转载 2018-10-02 21:34:32 · 325 阅读 · 0 评论 -
打卡第十一天
HDU2035 人见人爱A^B【快速模幂】Problem Description求A^B的最后三位数表示的整数。说明:A^B的含义是“A的B次方” Input输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。 Output对于每个测试实例,请...转载 2018-10-03 22:25:20 · 165 阅读 · 0 评论 -
打卡第二十天(计算最大子段问题)
计算最大子段(分治法)这个程序使用分治法计算最大子段,结果为最大子段之和,用递归程序实现。原始数据使用随机函数生成。采用结构化程序设计,可以很容易改为从标准输入或文件读入数据,只需要修改函数getData即可。数据个数由宏定义给出,也可以轻松地改为输入。#include<stdio.h>#include<stdlib.h>#include<ti...转载 2018-10-13 12:11:14 · 123 阅读 · 0 评论 -
打卡第十四天(菲波拉契数列)
菲波拉契数列菲波拉契数列是典型的问题,几乎出现于所有有关程序设计和算法等的书籍中。菲波拉契数列与杨辉三角也是有关系的,看以下这张图就知道了。菲波拉契数列的递归定义如下:f(0)=0 n=0f(1)=1 n=1f(n)=f(n-2)+f(n-1) n>=2当n比较大之后,菲波拉契数列的f(n-1)/f(n)则接近于黄金分割数0.618。菲波拉契数列不仅仅有这...转载 2018-10-06 22:13:44 · 252 阅读 · 0 评论 -
打卡第十三天(八皇后问题回溯法)
八皇后(N皇后)问题算法程序(回溯法)这是一个经典问题,经常出现于各种有关程序与算法的教科书中。本问题是求所有可行解,所以要用穷尽搜索,回溯法适合于穷尽搜索。本程序使用递归调用的回溯法来解决问题。递归的关键是递归调用和结束条件。比起非递归的回溯法来,本程序逻辑相对比较简洁,但是时间上会略微慢一些。/*** 【问题描述】在一个8×8的国际象棋棋盘上放置8个皇后,...转载 2018-10-05 23:13:50 · 186 阅读 · 0 评论 -
打卡第五天
Wooden Stickshttp://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1001&cid=33858 二、题目释义给你一堆具有长度和重量的木头,让你去机器里加工,机器会有一个一分钟的set时间,首次加工需要set一次,当连续放入的木头不满足后者的长度和重量都大于等于前者时,机器需要set一下,让你求出最短的set...转载 2018-09-27 21:31:42 · 173 阅读 · 0 评论 -
打卡第十九天(选择问题)
选择问题(第k小元素)(分治法)Selection algorithm选择问题即第k小元素问题。解决该问题的基本思想与快速排序算法相同,通过选择基元进行划分,从而知道第k小元素在哪里。原始数据使用随机函数生成。采用结构化程序设计,可以很容易改为从标准输入或文件读入数据,只需要修改函数getData即可。数据个数由宏定义给出,也可以轻松地改为输入。算法有递归与非递归两种过...转载 2018-10-12 19:26:59 · 157 阅读 · 0 评论 -
打卡第十二天
汉若塔问题算法程序这是一个经典的问题,递归程序实现,子程序中两次调用自己。也是递归调用程序中的范例。递归程序的关键在于递归调用和结束条件,通常十分简洁明了。程序中,使用条件编译来统计子程序调用次数。 /* * * 汉诺塔问题算法程序 * */ #include <stdio.h> //#def...转载 2018-10-04 22:34:34 · 197 阅读 · 1 评论