算法
文章平均质量分 61
时间沉淀美好
开发一枚
展开
-
Optimize你的多项式计算
现在问题是计算多项式:f(x)=a[0]+a[1]*x^1+a[2]*x^2+...+a[n]*x^n以下代码提供朴素版和优化版(optimize)://给定多项式在给定x处的值#include#include#include#includedouble duration;//持续时间 clock_t start,stop;using namespace std;原创 2015-06-10 22:17:30 · 417 阅读 · 0 评论 -
Two pointers技巧的应用
查找数组中两个位置不同的数字之和为sum的个数。先来看看暴力法,粗略估计,时间复杂度为0(n^2).void violence(int *a,int totalnumber,int sum){ int count=0;//计算不匹配的结果次数 for(int i=0;i<totalnumber-1;++i) { for(int j=i+1;j<totalnumber;+原创 2015-04-11 16:37:58 · 503 阅读 · 0 评论 -
二路归并排序
递归版本(也是最方便的版本咯)#include#includeconst int max=1000;void merge(int *rui,int L1start,int L1end,int L2start,int L2end)//分组归并 { int i=L1start,j=L2start; int temp[max],index=0; while(i<=L1end&&j<=L2原创 2015-04-11 20:33:50 · 323 阅读 · 0 评论 -
暴力之整除的应用
有这么一个整数,只知道前面几位,不知道末两位,若该整数被另一个整数除尽,那么该整数的末两位应该是什么?这是一道入门级的数论题。#include#includeusing namespace std;int main(){ int a,b; while(cin>>a>>b) { if(a==0&&b==0) { break; } a*=100; int原创 2015-04-05 21:18:28 · 511 阅读 · 0 评论 -
蓝桥杯 C本科B组 调和级数无限逼近
1/1 + 1/2 + 1/3 + 1/4 + ... 在数学上称为调和级数。它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字。但是,它发散的很慢:前1项和达到 1.0前4项和才超过 2.0前83项的和才超过 5.0那么,请你计算一下,要加多少项,才能使得和达到或超过 15.0 呢?请填写这个整数。注意原创 2015-04-05 21:21:01 · 1385 阅读 · 1 评论 -
ACM 多米诺骨牌游戏
《基础训练题解》上的一道题目,我就不敲题目了。思路:大概一眼就能想到dfs,数据量不大,不用担心很多#include#includeusing namespace std;const int N=100;int vist[N][N];int map[N][N];int dfs(int x,int y){ vist[x][y]=1; if(map[x][y]==5||map原创 2015-04-07 22:27:09 · 1680 阅读 · 0 评论 -
并查集 好朋友
天勤书上一道题,很简洁的展现了并查集的思想。大致意思是x和y是和朋友,xx和yy是好朋友......要你分组使组内都是好朋友,组外都不是好朋友。数据量比较小,很水,路径压缩不考虑也没问题。#includeusing namespace std;#define max 200int father[max];bool isroot[max];void init(i原创 2015-04-12 20:40:09 · 639 阅读 · 0 评论 -
斐波那契的整除
问题·是这样的:已知斐波那契数列的前n项为1,1,2,3,5,8,13,21,34......问f(n)的值能否被3和4整除?输入:输入数据有若干组,每组包含一个整数n(1输出:对应每组数据,若f(n)能被3整除,则输出3; 若f(n)能被4整除,则输出4;原创 2015-04-05 21:47:45 · 1285 阅读 · 0 评论 -
两仪剑法
两仪剑法是武当派武功的搞基功夫,必须两个人配合使用威力才大,同时该剑法招数变化太快太多。设武当弟子甲的招数变化周期为M,武当弟子乙的招数变化周期为N,两弟子同时使用该剑法,当两人同时使用该剑法,当两人恰好同时达到招数变化周期结束时,威力最大,此时能将邪教妖人置于死地。请计算当威力最大时,每个人都用了多少招?(用t表示)?输入数据:两个整数M,N(1输出数据:输出威力最大时出手了多少招(1原创 2015-04-05 23:52:45 · 593 阅读 · 0 评论 -
二分法的具体应用
先来看看经典的二分查找问题不多说,代码附上int BinarySearch(int *a,int TotalNumber,int number)//求数number所在的位置 //TotalNumber:要比较的数量 number:查找的数字 { int left=0,right=TotalNumber,mid; while(left<=right) { mid=(lef原创 2015-04-11 15:55:29 · 596 阅读 · 0 评论 -
ACM 今年暑假不AC
这是一道很经典的贪心算法题目,不再赘述/*今年暑假不AC 贪心策略:选择结束最早的 */#include#include#includeusing namespace std;const int N=100;struct caorui{ int begin; int end;}node[N];int compare(caorui a,caorui b){原创 2015-06-16 00:19:37 · 1019 阅读 · 0 评论 -
快速排序
快速排序是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。#includeusing namespace std;void QuickSo原创 2015-04-11 21:47:37 · 336 阅读 · 0 评论 -
ACM 油田合并
某石油公司发现了一个油田。该油田由n*m个单元组成的矩形,有些单元里有石油,有些则没有。单元油田可以通过上,下,左或右连通。在一个单元油田里架设一台采油机,它可以把和该单元油田相连的单元油田的石油采完。该公司想知道最少需要架设几台采油机能把所有的石油采完?示例输入:2 2@**@2 2@@@@示例输出:21思路:第一意识想到d原创 2015-04-06 20:26:32 · 2358 阅读 · 0 评论 -
枚举百鸡问题的算法优化
百钱买百鸡问题,很经典的一个有意思的算法题。先来看看一般的做法:#includeusing namespace std;int main(){int x,y,z;for(x=1;x{for(y=1;y{z=100-x-y;if(x*5*3+y*3*3+z==3*100){cout}}}return 0;}复杂度为O原创 2015-03-31 13:11:49 · 455 阅读 · 0 评论 -
ACM 火星国的无脑总统
思路:dfs这是一道对图比较浅显的表示的题思路很有启发性,对思维有帮助。#includeusing namespace std;const int N=100;int vist[N];int map[N][N]; int n;int dfs(int x){ vist[x]=1; for(int i=1;i<=n;++i) { if(x==i) conti原创 2015-04-08 11:03:08 · 754 阅读 · 0 评论 -
DFS解决01背包问题
本篇博文着重用dfs解决著名的背包问题01背包问题要点在:选与不选。所以我们很容易联想到dfs来解决这个问题!下面我们来看看是如何实现的:#includeusing namespace std;const int N=30;int w[N],value[N],n,maxvalue=0,V;void dfs(int index,int sumw,int sumv){ if(i原创 2015-04-02 16:34:11 · 3046 阅读 · 0 评论 -
经典的汉诺塔问题
#include#includeusing namespace std;int count;void dfs(int stick,char a,char b,char c){ if(stick==1) { printf("第%d次 %c-->%c\n",++count,a,c); return; } dfs(stick-1,a,c,b); printf("第%d次原创 2015-04-21 20:29:22 · 452 阅读 · 0 评论 -
约瑟夫环问题之例-----猴子选大王
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。 猴子选大王只是约瑟夫问题衍生出的一个典型算法例题,本篇博文介绍原创 2015-03-31 21:31:50 · 831 阅读 · 0 评论