
基础
zhhe0101
这个作者很懒,什么都没留下…
展开
-
选择排序——一步一步算法篇
基本思想:每一次循环找出这一列中最大(或最小)的元素,将其放置在这一列的最前,知道所有循环结束。#include<iostream>#include<cstdio>#include<cstring>#include<string>using namespace std;int main() //选择排序 { int n,a[1000],i,j,k,m; cin>>原创 2016-05-10 20:14:23 · 479 阅读 · 0 评论 -
漫谈递归——递归的思想
为什么要用递归编程里面估计最让人摸不着头脑的基本算法就是递归了。很多时候我们看明白一个复杂的递归都有点费时间,尤其对模型所描述的问题概念不清的时候,想要自己设计一个递归那么就更是有难度了。很多不理解递归的人(今天在csdn里面看到一个初学者的留言),总认为递归完全没必要,用循环就可以实现,其实这是一种很肤浅的理解。因为递归之所以在程序中能风靡并不是因为他的循环,大家都知道递归分两步,递和归,那么可以转载 2016-05-20 09:00:13 · 531 阅读 · 0 评论 -
漫谈递归——递归需要满足的两个条件
很多人对递归的理解不太深刻。一直就停留在“自己调用自己”的程度上。这其实这只是递归的表象(严格来说连表象都概括得不全面,因为除了“自己调用自己”的递归外,还有交互调用的递归)。而递归的思想远不止这么简单。递归,并不是简单的“自己调用自己”,也不是简单的“交互调用”。它是一种分析和解决问题的方法和思想。简单来说,递归的思想就是:把问题分解成为规模更小的、具有与原问题有着相同解法的问题。比如二分查找算法转载 2016-05-20 14:03:13 · 15896 阅读 · 0 评论 -
二分查找+基础应用
二分查找二分查找算法二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为:1.第一步查找中间元素,即5,由于5<6,则6必然在5之后的数组原创 2016-10-12 10:33:42 · 624 阅读 · 0 评论 -
读入优化
#include<cstdio>#include<iostream>using namespace std;int a[10001];int GET(){ int x=0,f=1; char c; c=getchar(); if (c==' ') return x*f; while (c<'0'||c>'9') {if (c=='-') f=-1;c原创 2016-10-23 21:54:16 · 422 阅读 · 0 评论 -
快速幂+快速幂经典例题
快速幂取模算法所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模算法。我们先从简单的例子入手:求a^b mod c 算法1.直接设计这个算法:int ans = 1;for(int i = 1;i<=b;i++){ ans = ans * a;}原创 2016-10-15 10:59:48 · 8516 阅读 · 2 评论 -
【noip2001 提高组T4】 Car的旅行路线 预处理+最短路
又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t。 那么Car应如何安排到城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教。找出一条从城市A到原创 2016-11-10 15:23:23 · 440 阅读 · 0 评论 -
同余运算及其基本性质
100除以7的余数是2,意思就是说把100个东西七个七个分成一组的话最后还剩2个。余数有一个严格的定义:假如被除数是a,除数是b(假设它们均为正整数),那么我们总能够找到一个小于b的自然数r和一个整数m,使得a=bm+r。这个r就是a除以b的余数,m被称作商。我们经常用mod来表示取余,a除以b余r就写成a mod b = r。如果两个数a和b之差能被m整除,那么我们就说a和b对模数m同余(关于m转载 2016-11-15 19:43:27 · 7244 阅读 · 0 评论 -
【持续更新中······】 关于易犯错误及做题注意事项
错误及注意事项······序:突然发现每个神犇都有一篇关于平时做题时出现的错误以及需要注意的地方。 决定向他们学习,发一篇博文,学习他们的做法。 我好想颓废关于比赛 1.比赛时一定要分配好时间,时间,时间,重说三。2.当一道题没有思路时一定要及时放弃,不要在一道题上浪费太多时间。3.如果一道题只想到部分分数的算法,那么先把部分分拿到手,拿到分才是硬道理。4不会的题能打暴力就先打完暴力,说不定你原创 2016-11-17 13:18:23 · 660 阅读 · 0 评论 -
【持续更新中······】 各种模板+神奇黑科技
读入优化:int GET(){ int x=0,f=1; char c; c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();} return x*f;}快速幂:int k原创 2016-11-17 13:47:58 · 879 阅读 · 0 评论 -
漫谈递归——一步一步算法篇
学习递归,偶然看到简明现代魔法上的文章,感到受益匪浅,决定留下这几个网址,欢迎大家交流学习。 嗯,这网站真的不错。——简明现代魔法 1.漫谈递归:递归的思想 2.漫谈递归:递归需要满足的两个条件 3.漫谈递归:字符串回文现象的递归判断 4.漫谈递归:二分查找算法的递归实现 5.漫谈递归:递归的效率问题 6.漫谈递归:递归与循环转载 2016-05-18 16:58:48 · 598 阅读 · 0 评论 -
五种典型的递推关系——一步一步算法篇
五种典型的递推关系 1.Fibonacci数列在所有的递推关系中,Fibonacci数列应该是最为大家所熟悉的。在最基础的程序设计语言Logo语言中,就有很多这类的题目。而在较为复杂的Basic、Pascal、C语言中,Fibonacci数列类的题目因为解法相对容易一些,逐渐退出了竞赛的舞台。可是这不等于说Fibonacci数列没有研究价值,恰恰相反,一些此类的题目还是能给我们一定的启发的。原创 2016-05-18 11:02:06 · 19199 阅读 · 1 评论 -
高精度除法(高精除以低精)——一步一步算法篇
高精度除法(高精除以低精)利用0~9次的循环减法模拟除法的过程,并计数,从而得到商的值。#include<iostream>#include<cstring>#include<cstdio>using namespace std;int main(){ char a1[100],c1[100]; int a[100],c[100],lena,i,x=0,lenc,b;原创 2016-05-15 19:49:24 · 5638 阅读 · 0 评论 -
冒泡排序——一步一步算法篇
基本思想:依次比较相邻的两个数,并两两交换,使大(或小)的数不停向前推进,以此类推…… 由于在排序过程中总是大数往前,小数往后,相当气泡上升,所以叫冒泡排序。#include<iostream>#include<cstdio>#include<cstring>#include<string>using namespace std;int main() { int n,原创 2016-05-10 20:27:06 · 1067 阅读 · 0 评论 -
桶排序——一步一步算法篇
桶排序 算法思想:将待排序的元素放在一个有范围的数列里,将这个数列设计成有限个有序桶,将对应元素放在对应桶里,顺序输出桶里的值,得到有序序列。#include<iostream>#include<cstdio>#include<cstring>#include<string>using namespace std;int main() { int n,a[1000],i,原创 2016-05-10 21:01:33 · 427 阅读 · 0 评论 -
插入排序——一步一步算法篇
插入排序 算法思想:将待排序的数据放在一个数组中,并设置一个中间量m,用来存储每次插入比较的元素。 (1) a[1]自成1个有序区,无序区为a[2..n]; (2) 从i=2起直至i=n为止,将a[i]放在恰当的位置,使a[1..i]数据序列有序; ① m:=a[i]; ② 将m与前i-1个数比较 , j:=i-1; while(x#include<iostream>原创 2016-05-11 08:19:36 · 753 阅读 · 0 评论 -
高精度除法(大数相除)
高精度除法(高除高)#include<cmath>#include<iostream>#include<cstdio>#include<cstring>#include<string>using namespace std;int a[101],b[101],c[101],d,i;void shuru(int a[]){ string s; cin>>s;原创 2016-05-10 19:54:39 · 7641 阅读 · 2 评论 -
快速排序——一步一步算法篇
快速排序 快速排序是对冒泡排序的一种改进 基本思想:在待排序的数据中找出一个枢轴,这个枢轴可以在两侧,可以在中间。然后通过一趟排序将这组数据分成两部分,使一部分的数据要比枢轴大,另一部分数据要比枢轴小,但这两部分数据仍是无序的。再通过递归和循环排序,将这两部分数据重复上面过程,从而达到让整个序列有序。 假设待排序列为{a[1],a[1+1],a[1+2],…,a[r]},首先任意选取一原创 2016-05-12 07:31:27 · 743 阅读 · 3 评论 -
归并排序——一步一步算法篇
归并排序 基本思想:将两个或两个以上的有序数列(或有序表),合并成一个有序数列,这个操作叫做归并操作。所以,将两个有序表合并成一个有序表,称为二路归并,同理,有三路归并,四路归并等等。 二路归并——例如:(7,10,13,15)和(4,8,19,20),归并后得到的有序表为(4,7,8,10,13,15,19,20),这就称作二路归并。 归并过程:设置i,j两个指针,比较a[i]和a[j]的大原创 2016-05-14 16:01:24 · 1468 阅读 · 0 评论 -
各种排序算法的比较——一步一步算法篇
各种排序算法的比较 1.稳定性比较 插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的。 选择排序、希尔排序、快速排序、堆排序是不稳定的。2.时间复杂性比较 插入排序、冒泡排序、选择排序的时间复杂性为O(n2);快速排序、堆排序、归并排序的时间复杂性为O(nlog2n);桶排序的时间复杂性为O(n); 若从最好情况考虑原创 2016-05-15 18:47:22 · 530 阅读 · 0 评论 -
高精度加法——一步一步算法篇
高精度加法利用竖式计算的原理,通过处理进位,来计算高精度数据的和。 核心代码(处理进位):int c[100];void add(int a[],int b[]) //a,b,c都为数组,分别存储被加数、加数、结果{ int i=1,x=0; //x是进位 while ((i<=a数组原创 2016-05-15 19:09:20 · 944 阅读 · 0 评论 -
高精度减法——一步一步算法篇
高精度减法利用竖式计算的方式,注意借位和错位,还有前导0。#include<cmath>#include<iostream>#include<cstdio>#include<cstring>#include<string>using namespace std;int main(){ int a[256],b[256],c[256],lena,lenb,lenc,i;原创 2016-05-15 19:20:05 · 8575 阅读 · 0 评论 -
高精度乘法——一步一步算法篇
高精度乘法 利用竖式计算的原理,注意错位相加和进位。#include<iostream>#include<cstdio>#include<cstring>using namespace std;int main(){ int a[1000],b[1000],c[1000],lena,lenb,lenc,i,j,x; char a1[101],b1[101];原创 2016-05-15 19:42:22 · 1782 阅读 · 0 评论